设计模式——抽象工厂模式
来源:互联网 发布:nosql数据库有哪些 编辑:程序博客网 时间:2024/05/15 22:38
抽象工厂(Factory Method)
概述:抽象工厂的意图在于创建一系列互相关联或互相依赖的对象。
工厂方法用来创建一个产品,它没有分类的概念,而抽象工厂则用于创建一系列产品,所以产品分类成了抽象工厂的重点。
低端冰箱
高端冰箱
洗衣机:
低端洗衣机
高端洗衣机
测试类:
概述:抽象工厂的意图在于创建一系列互相关联或互相依赖的对象。
工厂方法用来创建一个产品,它没有分类的概念,而抽象工厂则用于创建一系列产品,所以产品分类成了抽象工厂的重点。
工厂生产的所有产品都有高低端,其他的产品也都是遵守这个规则,于是就有了一下产品家族树
冰箱:低端冰箱
高端冰箱
洗衣机:
低端洗衣机
高端洗衣机
我们可以为冰箱和洗衣机分别定义两个产品接口,以对他们进行分类
洗衣机接口:
public interface Washer {}
冰箱接口:
public interface Icebox {}低端洗衣机产品:
public class LowWasher implements Washer{ public LowWasher(){ System.out.println("低端洗衣机被制造了"); }}
低端冰箱产品:
public class LowIcebox implements Icebox{ public LowIcebox(){ System.out.println("低端冰箱被制造了"); }}高端洗衣机产品:
public class LuxuryWasher implements Washer { public LuxuryWasher(){ System.out.println("高端洗衣机被制造了"); }}
高端冰箱产品:
public class LuxuryIcebox implements Icebox{ public LuxuryIcebox(){ System.out.println("高端冰箱被制造了"); }}
低端产品工厂类:
//创建低端产品的工厂public class LowFactory implements Factory{ //创建低端洗衣机 public Washer createWasher(){ return new LowWasher(); } //创建低端冰箱 public Icebox createIcebox(){ return new LowIcebox(); }}
高端产品工厂类:
//创建高端产品的工厂public class LuxuryFactory implements Factory{ //创建高端洗衣机 public Washer createWasher(){ return new LuxuryWasher(); } //创建高端冰箱 public Icebox createIcebox(){ return new LuxuryIcebox(); }}
测试类:
public class Test { public static void main(String[] args) { LowFactory lowFactory = new LowFactory(); lowFactory.createWasher(); lowFactory.createIcebox(); LuxuryFactory luxuryFactory = new LuxuryFactory(); luxuryFactory.createWasher(); luxuryFactory.createIcebox(); }}
在运用上工厂方法和抽象工厂,都有自己的应用场景,并没有什么优劣之分,但在应用抽象工厂之前,要先对创建的对象进行系统的分类,这点很重要,好的产品分类规则能为具体工厂类的选择调用和以后的扩展提供清晰的思路。
阅读全文
0 0
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 九度 1088
- 什么是模块化开发?
- 二分图最大匹配
- 纯属无聊玩贪心
- java学习之路(1)-第一个hello word
- 设计模式——抽象工厂模式
- Dubbo中的协议
- centos6.5 yum安装mysql5.7
- NX二次开发的C#参考文献查找方式
- 编程题#6 MyString 求大神解答
- java URL、HTTP与HTML+CSS
- maven 手动安装
- js切割url后面?字符串方法
- 待学习&复习的内容