设计模式GOF23——抽象工厂模式

来源:互联网 发布:Linux更新软件 编辑:程序博客网 时间:2024/04/29 15:23

抽象工厂模式(Abstract Factory)是创建者模式的一种,是一种负责创建对象的模式。

模式的职责

抽象工厂算是工厂模式的一种,因为逻辑和实现相对复杂一些,所以在设计模式中不少说明都是分开说明的。
抽象工厂也是为了实现对象创建和对象使用的分离。工厂模式虽然已经实现了这一需求,但是还是不够彻底。比如:如果创建的对象不是一个对象,而已一系列对象的时候,普通的工厂模式就会无能为力了。这个时候就需要抽象工厂模式。
简而言之,抽象工厂模式的职责是创建产品族和使用产品族的分离。是工厂模式的一种特殊情况。

模式的实现

创建一个工厂对象的抽象类,定义产品族的基本信息和方法,将产品族的创建封装在实现类的相应方法中。对于对象的创建和管理,可以使用相应类的抽象接口来实现。
抽象工厂不可以增加产品,但可以增加产品族。

//引擎接口,汽车产品族的对象之一public interface Engine {    void start();}//豪华版引擎类public class LuxuryEngine implements Engine{    public void start() {        //奢侈版引擎的方法实现    }}//低端版引擎类public class LowEngine implements Engine{    public void start() {        //低端版引擎的方法实现    }}public interface Seat {    void seat();}//豪华版车座类public class LuxurySeat implements Seat{    public void seat() {        //奢侈版车座的方法实现    }}//低端版车座类public class LowSeat implements Seat{    public void seat() {        //低端版车座的方法实现    }}//奢侈版汽车的创建类,实现奢侈版汽车的创建public class LuxuryCar implements CarFactory{//奢侈版汽车的引擎创建    public Engine createEngine() {        Engine e = new LuxuryEngine();        return e;    }//奢侈版汽车的车座创建    public Seat createSeat() {        Seat s = new LuxurySeat();        return s;    }}//低端版汽车的创建类,实现低端版汽车的创建public class LuxuryCar implements CarFactory{//低端版汽车的引擎创建    public Engine createEngine() {        Engine e = new LowEngine();        return e;    }//低端版汽车的车座创建    public Seat createSeat() {        Seat s = new LowSeat();        return s;    }}

低端版和奢侈版算是两种不同的产品组,通过对创建工厂的抽象,使得不同的产品组的编写变得容易一些。
类似的一套产品的创建和更换可以用抽象工厂方式来做到,比如类似QQ空间换皮肤,可以通过抽象工厂模式变得容易些。

工厂模式的总结

简单工厂模式适合创建对象但扩展的话不符合开闭原则。
工厂模式符合开闭原则,但是会创建过多的类。
抽象工厂模式是对产品族的创建和控制分离的特殊状况的工厂模式。
工厂模式在实际应用中一般不会单独出现,往往会和其他的方式结合起来。
工厂模式的一些应用场景:
1. JDK中Calendar的getInstance方法
2. JDBC中Connection对象的获取。
3. Hibernate中SessionFactory创建Session。
4. Spring中IOC容器创建管理bean对象。
5. XML解析时DocumentBuliderFactory创建解析对象。
6. 反射中Class对象的newInstance
其实工厂模式的应用还是比较广泛的,一般一些需要创建XXXFactory的都属于工厂模式。

0 0
原创粉丝点击