抽象工厂
前述:在之前的工厂方法中,我们定义了一个CarFactory(接口),WulingFactory(接口的实现类),来生产具体品牌的车。但是由于每个Factory只能生产车这一个单一的产品,当提系统要生产的产品众多时,就需要定义多geFactory接口就会使得系统的开销大大提高。因此我们提出了抽象工厂这一思想。
在抽象工厂中ProductFactory(接口)中可以生产多种产品(如:手机,路由器等),不同的生产商(HuaWeiFactory)实现该接口,来生产自己的产品(华为手机,华为路由器),与产品方法不同之处就是工厂中可以生产的产品种类多了。
两个概念: 产品族:工厂中可以生产的所有种类产品称为产品族,如:ProductFactory中可以生产 手机,路由器等 这就是一个产品族。
在下图中就是YiliFactory可以生产原味,草莓味酸奶。
产品等级:就是产品的继承结构,如:iPhone(接口),具体的有HUAWEIiPhone,XiaomiiPhone,这就是一个产品等级。

抽象工厂中的类和接口:(接口就是一种约束!!!)
AbstractFactory(抽象工厂 接口):里面定义了一些产品的生产方法,这些产品称为一个产品族。
ConcreteFactory(具体工厂 类):实现了抽象工厂接口,来生产自己的具体产品,这些产品也是产品族。
iPhone(手机 接口):定义了要实现手机应具备的功能,是所有手机产品的父结构,这就是一个产品等级的概念。
HUAWEIPhone(手机 类):实现了手机接口。
具体代码的实现:
定义两个父产品结构:
//手机产品接口 public interface IphoneProduct { void open(); void shutdown(); void call(); void sendms(); } //路由器产品接口 public interface RootProduct { void open(); void close(); void safe(); }
HUAWEIIPhone,HuaWeiRoot,XiaomiIPhone,XiaomiRoot:(产品接口的实现)
//华为手机 public class HuaweiIphone implements IphoneProduct { @Override public void open() { System.out.println("华为手机开启"); } @Override public void shutdown() { System.out.println("华为手机关闭"); } @Override public void call() { System.out.println("华为手机打电话"); } @Override public void sendms() { System.out.println("华为手机发短信"); } } //华为路由器 public class HuaweiRoot implements RootProduct { @Override public void open() { System.out.println("华为路由器开启"); } @Override public void close() { System.out.println("华为路由器关闭"); } @Override public void safe() { System.out.println("华为路由器安全"); } } //小米手机 public class XiaomiIphone implements IphoneProduct { @Override public void open() { System.out.println("小米手机开启"); } @Override public void shutdown() { System.out.println("小米手机关闭"); } @Override public void call() { System.out.println("小米手机打电话"); } @Override public void sendms() { System.out.println("小米手机发短信"); } } //小米路由器 public class Xiaomiroot implements RootProduct { @Override public void open() { System.out.println("小米路由器开启"); } @Override public void close() { System.out.println("小米路由器关闭"); } @Override public void safe() { System.out.println("小米安全"); } }
抽象工厂:(接口 可以生产一个产品族)
//抽象工厂 生产 手机,路由器 //抽象的抽象 public interface IProductFactory { IphoneProduct getIphone(); //生产手机 RootProduct getRoot(); //生产路由器 }
具体工厂(小米工厂,HUAWEI工厂):
//小米工厂 生产小米的手机 路由器 public class XiaomiFactory implements IProductFactory { @Override public IphoneProduct getIphone() { return new XiaomiIphone(); } @Override public RootProduct getRoot() { return new Xiaomiroot(); } } //华为工厂 生产华为的手机 路由器 public class HuaweiFactory implements IProductFactory { @Override public IphoneProduct getIphone() { return new HuaweiIphone(); } @Override public RootProduct getRoot() { return new HuaweiRoot(); } }
消费者示例:
public class Client { public static void main(String[] args) { //小米系列产品 System.out.println("你好 这里是小米之家!=============="); //小米工厂 XiaomiFactory xiaomiFactory = new XiaomiFactory(); IphoneProduct xiaomiFactoryIphone = xiaomiFactory.getIphone(); xiaomiFactoryIphone.call(); xiaomiFactoryIphone.open(); //华为工厂 System.out.println("欢迎来到华为!"); HuaweiFactory huaweiFactory = new HuaweiFactory(); IphoneProduct iphone = huaweiFactory.getIphone(); iphone.open(); iphone.call(); } }

浙公网安备 33010602011771号