1写在前面的话
这一章我们来学习一下抽象工厂模式,
• 抽象工厂模式
– 用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)
– 抽象工厂模式是工厂方法模式的升级版本,在有多个业务品种、业务分类时,通过抽象工厂模式产生需要的对象是一种非常好的解决方式。
总的来说,它是创建一类产品,而不是单个产品。
2抽象工厂模式
用一个代码示例来解释抽象工厂
- 首先我们通过模拟造车工厂,把车上的引擎和座椅分为两类,一类是奢华的,一类是很low的
2.我们来创建Engine.java (引擎接口)和Seat.java( 座椅接口 ),并且分别写出奢华和low两种情况的类。
public interface Engine { void run(); } /*** * 在引擎里面分为 奢华(Luxury)和 垃圾(low) */ class LuxuryEngine implements Engine{ @Override public void run() { System.out.println("奢华引擎,跑的超快!"); } } class LowEngine implements Engine{ @Override public void run() { System.out.println("很菜的引擎,跑的慢!"); } }
public interface Seat { void feel(); } /*** * 在座椅里面分为 奢华(Luxury)和 垃圾(low) */ class LuxurySeat implements Seat{ @Override public void feel() { System.out.println("超级舒服!"); } } class LowSeat implements Seat{ @Override public void feel() { System.out.println("坐的很不爽"); } }
3.然后我们来开始创建工厂接口 ---CarFactory.java
public interface CarFactory {
Engine createEngine();
Seat createSeat();
}
在这个接口里,我们提供了创建引擎和创建座椅的方法,并且返回Engine和Seat对象。
4. 因为抽象工厂是创建一个产品族,而不是单个产品,所以我们来创建一个生产low的产品的工厂和一个生产奢华的产品的工厂,这两个工厂都继承于Carfactory接口。
public class LowFactory implements CarFactory { @Override public Engine createEngine() { return new LowEngine(); } @Override public Seat createSeat() { return new LowSeat(); } }
public class LuxuryFactory implements CarFactory { @Override public Engine createEngine() { return new LuxuryEngine(); } @Override public Seat createSeat() { return new LuxurySeat(); } }
5. 最后我们来测试一下我们的代码:
public class Test { public static void main(String[] args){ CarFactory carFactory =new LuxuryFactory(); Engine engine = carFactory.createEngine(); engine.run(); CarFactory carFactory1 = new LowFactory(); Seat seat = carFactory1.createSeat(); seat.feel(); } }
输出结果:
奢华引擎,跑的超快!
坐的很不爽
Process finished with exit code 0
分析:可以看出三个工厂都有自己的利弊之处,但是实际开发中,抽象工厂和方法工厂用的比较少,因为它的结构较简单工厂更加的复杂,一般抽象工厂都用于jdk开发和一些大型开源框架中。