设计模式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的都属于工厂模式。
- 设计模式GOF23——抽象工厂模式
- 设计模式GOF23——工厂模式
- GOF23设计模式之抽象工厂模式的实现
- 【设计模式】—Gof23种设计模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 【一天一道LeetCode】#219. Contains Duplicate II
- NLPIR Not valid license or your license expired!
- scala注意点
- 用python简单处理图片(4):图像中的像素访问
- 关于cocos2d-x内从管理引用计数机制的小技巧
- 设计模式GOF23——抽象工厂模式
- 测试要点
- 无法装入Solidworks DLL文件 GdtAnalysisSupport.dll--问题解决
- angularJS系列之tab强制刷新
- C#/.NET整数的三种强制类型转换(int)、Convert.ToInt32()、int.Parse()的区别总结
- mysql 主从原理
- java的(PO,VO,TO,BO,DAO,POJO)解释
- 用python简单处理图片(5):图像直方图
- HDU - 1251 - 统计难题(字典树)