《学习笔记》之JAVA设计模式--抽象工厂模式
2016-05-19 19:40
453 查看
在学习了厉风行老师的《设计模式系列课程》后为方便查看,对其内容进行整理:
一、什么是抽象工厂模式
抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的。抽象工厂模式可以向客户端提供一个接口,使得客户端在不必
指定产品
的具体类型的情
况下,能够创
建多个产品族的产品对象。
此处引入了一个新的概念产品族,那什么是产品族呢?百度一下:产品族是以产品平台为基础,通过添加不同的个性模块,以满足不同客户个性化需求的一组相关产品。
所谓产品族通俗来说即是:具有某一共性的一系列相关产品.以前面的Apple(苹果),Banana(香蕉),Pear(梨)为例,Apple(苹果),Banana(香蕉),Pear(梨)这三种水果对应上图中的产品等级结构。
这三种水果有产自南方的,也有产自北方的,北方和南方则对应上图中的产品族,产自北方的Apple(苹果),Banana(香蕉),Pear(梨)就构成一个产品族,它们的共性是产自北方,同样产自南方的Apple(苹果),Banana(香蕉),Pear(梨)也构成了一个产品族。二、模式中包含的角色及其职责
1.抽象工厂(Creator)角色抽象工厂模式的核心,包含对多个产品结构的声明,任何工厂类都必须实现这个接口。2.具体工厂(ConcreteCreator)角色具体工厂类是抽象工厂的一个实现,负责实例化某个产品族中的产品对象。3.抽象(Product)角色抽象模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。4.具体产品(ConcreteProduct)角色抽象模式所创建的具体实例对象
总结:抽象工厂中的方法对应产品结构,具体工厂对应产品族。
接下来用代码进行说明:
保留之前工厂方法模式一章中的Fruit接口,用来负责描述所有水果实例应该共有的方法。
运行打印:采集北方苹果采集北方香蕉采集南方苹果采集南方香蕉
三、抽象工厂模式的优缺点
优点:
1、抽象工厂模式隔离了具体类的生产,使得客户并不需要知道什么被创建。
2、当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。
3、增加新的具体工厂和产品族很方便,无须修改已有系统,符合“开闭原则”。
缺点:
增加新的产品等级结构很复杂,需要修改抽象工厂和所有的具体工厂类,对“开闭原则”的支持呈现倾斜性。
优点代码举例:需求更改需要增加温室产品组。
先增加温室苹果和温室香蕉两个类。
publicclassWenshiAppleextendsApple{publicvoidget(){System.out.println("采集温室苹果");}}
再增加生产温室水果的温室工厂。
在MainClass中创建温室水果测试。
运行打印:
采集温室苹果
采集温室香蕉
产自温室的苹果和香蕉被正确创建,只是增加了新产品族的具体产品类和负责生产该产品族所有产品的工厂,无需对现有代码进行修改,很好的符合“开闭原则”。
相关文章推荐
- Jenkins学习总结(2)——Jenkins+Maven进行Java项目持续集成
- Jenkins学习总结(2)——Jenkins+Maven进行Java项目持续集成
- Jenkins学习总结(2)——Jenkins+Maven进行Java项目持续集成
- SunnyAmy comparator接口与Comparable接口的区别
- 编译原理词法分析 java简单实现
- Java之三 标识符、关键字、数据类型
- Java之三 标识符、关键字、数据类型
- Java之三 标识符、关键字、数据类型
- Java之二 面向对象
- java成员变量与局部变量修饰符的区别
- Java之二 面向对象
- Java之二 面向对象
- JAVA温习:WebService和RESTful的区别
- Java之一 Java语 言 的 产 生 及 其 特 点
- Java之一 Java语 言 的 产 生 及 其 特 点
- Java之一 Java语 言 的 产 生 及 其 特 点
- Java try/catch/finally代码块中加入return后的执行顺序问题
- 【Android】Eclipse自动编译NDK/JNI的三种方法
- Java Decompiler
- Struts2自定义拦截器(待续)