factory工厂模式之抽象工厂AbstractFactory
* 抽象工厂:
意图在于创建一系列互相关联或互相依赖的对象。
* 每个工厂都会创建一个或多个一系列的产品
* 适用于:产品不会变动,开始时所有产品都创建好,然后根据分类获取想要的 某一类产品(很像spring容器)
代码解释:
1.创建产品接口:手机和它的实现子类
//手机接口 public interface MobileProduct { } //实现子类Android public class Android implements MobileProduct{ public Android() { System.out.println("生产一个Android手机..."); } } //实现子类Apple public class Apple implements MobileProduct{ public Apple() { System.out.println("生产一个Apple手机..."); } }
2.创建产品接口2:汽车,和它的实现子类
//第二种产品:汽车 public interface CarProduct { } //实现子类1:宝马 public class BaoMa implements CarProduct{ public BaoMa() { System.out.println("生产一个宝马汽车..."); } } //实现子类2:奔驰 public class BenChi implements CarProduct{ public BenChi() { System.out.println("生产一个奔驰汽车..."); } }
3.创建抽象父类(或者抽象接口)和方法:可以生产手机和汽车,但是具体生产那种手机和汽车,不一定(由子类决定),因为里面的方法返回也是抽象的
//这里写接口也可以,抽象类个人理解:具体能看见的事物;接口:看不见的 public abstract class AbstractFactory { /** * 生产一个产品 * @return */ public abstract MobileProduct processMobile(); /** * 生产一个产品 * @return */ public abstract CarProduct processCar(); }
4.实现2个生产系列产品的工厂
/** * 生产 产品系列:一个苹果,一个宝马 * @author mlxs * */ public class FactoryMothedA extends AbstractFactory{ @Override public MobileProduct processMobile() { return new Apple(); } @Override public CarProduct processCar() { return new BaoMa(); } }
/** * 生产方式B 产品系列:一个安卓,一个奔驰 * @author mlxs * */ public class FactoryMothedB extends AbstractFactory{ @Override public MobileProduct processMobile() { return new Android(); } @Override public CarProduct processCar() { return new BenChi(); } }
5.客户端测试
public static void main(String[] args) { System.out.println("-----------------生产系列A:苹果和宝马-------------------"); //生产系列A:苹果和宝马 AbstractFactory factory = new FactoryMothedA(); factory.processMobile(); factory.processCar(); System.out.println("\n-----------------生产系列B:安卓和奔驰-------------------");
//生产系列B:安卓和奔驰
AbstractFactory factoryB = new FactoryMothedB();
factory.processMobile(); factory.processCar(); }
6.结果:
-----------------生产系列A:苹果和宝马------------------- 生产一个Apple手机... 生产一个宝马汽车... -----------------生产系列B:安卓和奔驰------------------- 生产一个Apple手机... 生产一个宝马汽车...
缺陷:有新产品的时候,改动地方很多(产品类、系列工厂类、抽象工厂类都要改)
逃避不一定躲得过,面对不一定最难过