定义
抽象工厂模式属于创建型模式,提供了一种创建对象的最佳创建方式。
抽象工厂模式,是一个超级工厂,用于创建其他工厂的工厂。
介绍
用途:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类
何时使用:系统的产品有多于一个的产品族,而系统只消费其中某一族的产品
本质:抽象工厂模式是工厂方法模式的升级版;工厂方法模式针对的是只有一个产品族;而当产品族不止一个的时候,工厂方法模式就升级成了抽象工厂模式
案例代码
由于代码篇幅较长,所以分成两部分
第一部分:产品部分
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| interface IpPhoneProduct { void printPhoneName(); }
interface IpRouterProduct { void printRouterName(); }
class HuaweiPhone implements IpPhoneProduct { @Override public void printPhoneName() { System.out.println("华为手机"); } }
class HuaweiRouter implements IpRouterProduct { @Override public void printRouterName() { System.out.println("华为路由器"); } }
class XiaomiPhone implements IpPhoneProduct { @Override public void printPhoneName() { System.out.println("小米手机"); } }
class XiaomiRouter implements IpRouterProduct { @Override public void printRouterName() { System.out.println("小米路由器"); } }
|
第二部分:生产工厂部分
和工厂方法模式进行对比
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| public interface IpProductFactory { IpPhoneProduct getipPhoneProduct(); IpRouterProduct getipRouterProduct(); }
class HuaweiProductFactory implements IpProductFactory { @Override public IpPhoneProduct getipPhoneProduct() { return new HuaweiPhone(); }
@Override public IpRouterProduct getipRouterProduct() { return new HuaweiRouter(); } }
class XiaomiProductFactory implements IpProductFactory { @Override public IpPhoneProduct getipPhoneProduct() { return new XiaomiPhone(); }
@Override public IpRouterProduct getipRouterProduct() { return new XiaomiRouter(); } }
class Client { public static void main(String[] args) { System.out.println(new HuaweiProductFactory().getipPhoneProduct()); System.out.println(new HuaweiProductFactory().getipRouterProduct());
System.out.println(new XiaomiProductFactory().getipPhoneProduct()); System.out.println(new XiaomiProductFactory().getipRouterProduct()); } }
|
对比和可以发现:他俩的区别就在于,一个是针对两个产品族以上的,一个是针对一个产品族的。