抽象工厂模式
什么是抽象工厂模式
抽象工厂简单地说是工厂的工厂,抽象工厂可以创建具体工厂,由具体工厂来产生具体产品。
抽象工厂,工厂的工厂。 与工厂方法的区别是一组。
具体细分到某个产品的领域
抽象工厂 生产不同的产品族 简单工厂 工厂方法 都是同一个产品族
抽象工厂 不是相同类型产品的 最后拼接成同一种产品 正常的情况下 业务逻辑下的 同一个产品组下的 当业务很复杂时候 会用到抽象工厂 做零部件的组装
看下面的例子:
先定义不同发动机:
package abstractFactory;//发动机 有不同的型号 public interface Engine { void run();}class EnginA implements Engine{ @Override public void run() { System.out.println("发动机转速很快"); }}class EnginB implements Engine{ @Override public void run() { System.out.println("发动机转速很慢"); }}
定义不同座位:
package abstractFactory;//座位public interface Chair { void run(); }class ChairA implements Chair{ @Override public void run() { System.out.println("自动加热"); }}class ChairB implements Chair{ @Override public void run() { System.out.println("不能加热"); }}
然后去组装(包装零部件):
定义包装工厂的接口:
package abstractFactory;public interface CarFactory { //创建发动机 Engine createEngin(); //创建座椅 Chair createChair();}
实现不同的组装类:
package abstractFactory;public class JiliFactory implements CarFactory { @Override public Chair createChair() { return new ChairA(); } @Override public Engine createEngin() { return new EnginA(); }}
上面组装了个吉利汽车
下面运行演示一下:
package abstractFactory;public class Client { public static void main(String[] args) { //具体哪个factory CarFactory carFactory = new JiliFactory(); Chair chair = carFactory.createChair(); Engine engin = carFactory.createEngin(); chair.run(); engin.run(); }}
运行结果:
抽象工厂和工厂方法: 抽象工厂可以放产多种不同品族 支持增加产品族 但是不支持扩展产品族