设计模式——抽象工厂模式
来源:互联网 发布:达内java培训班有用吗 编辑:程序博客网 时间:2024/06/04 08:04
@Author:云都小生
工厂方法模式遗难
上一节我们说到工厂方法模式,我们来回顾一下它的缺点。如果增加一个产品,就需要增加一个新的工厂,然后添加一个新的产品类。如果需要越来越多的产品,就得有越来越多的工厂,这样势必会增加系统的开销。所以该到学习抽象工厂模式的时候了。
两个被挖过来的概念
抽象工厂模式,其实就是对相关的产品进行分类,把一些具有相关性的产品组合起来,由一个工厂统一生产。例如说,一家羽绒服工厂,能够生产A品牌的羽绒服,也能生产B品牌的羽绒服、C品牌的羽绒服。
这里需要分清楚两个概念,分别是产品等级结构与产品族,这两个是我从刘伟博士的博客中看到的。
What is 产品等级结构?可以理解成同类型产品,不同品牌。笔记本有戴尔笔记本、华硕笔记本、联想笔记本。这是一个继承的关系,笔记本是父类(接口,各种品牌的笔记本是子类。
What is 产品族?同一个工厂生产同种品牌的产品,例如小米,他不止做手机,还做手环等等。这些相同品牌的产品构成了一个产品族。
抽象工厂模式的概念
从上面我概念,我们懂了工厂方法模式其实。但是一旦产品越来越多,就需要更多唯一的工厂类去实现,那多麻烦?
如果有3类产品,分别是电脑、电视、电冰箱,有三家企业都可以造这三种产品,那我们需不需要去定义
这就是抽象工厂模式的思维:产品等级结构将不同类的产品分开,将具有关系的产品放到一块去create。提供一个创建一系列相关对象的接口
一图胜千言
在抽象工厂模式中,依旧跟工厂方法模式拥用同样的角色:抽象工厂、具体工厂、抽象产品和具体产品。不同的是,抽象工厂提供了创建相同产品不同品牌的方法,而具体工厂实现了这些方法。
代码实现
//计算机抽象类(产品)abstract class Computer { abstract void test();}//联想电脑(具体产品)public class ComputerLen extends Computer{ void test() { System.out.println("这是联想笔记本"); }}//小米电脑(具体产品)public class ComputerMi extends Computer{ void test() { System.out.println("这是小米笔记本"); }}//电视抽象类(产品)public abstract class Television { abstract void test();}//小米电视(具体产品)public class TelevisionMi extends Television{ void test() { System.out.println("这是小米电视!"); }}//联想电视(具体产品)public class TelevisionLen extends Television{ void test() { System.out.println("这是联想电视!"); }}//抽象工厂interface Factory { public Computer createComputer(); public Television createTelevision();}//联想工厂(具体工厂)public class LenovoFactory implements Factory{ public Computer createComputer() { return new ComputerLen(); } public Television createTelevision() { return new TelevisionLen(); }}//小米工厂(具体工厂)public class MiFactory implements Factory { public Computer createComputer() { return new ComputerMi(); } public Television createTelevision() { return new TelevisionMi(); }}//mainpublic class Test { public static void main(String[] args) { MiFactory factory = new MiFactory(); Computer computer = factory.createComputer(); computer.test(); }}
抽象方法模式的优点
优点:我们用抽象工厂模式,弥补了工厂方法模式的缺点,这样一来我们就减少了类的数量,降低了程序的复杂度。当我们想要新增其他品牌的产品时,只需要另外加一个类即可,如果我们想增加同个品牌的其他产品,只需要在那个类里面增加,不需要另外写一个类,这就减少了类的数量,降低了程序的复杂度。
2017/9/27 21:13:00 @Author:云都小生(Cloudking)
阅读全文
0 0
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式——抽象工厂模式
- hdu2017沈阳网络赛补题(一)mustedge mustedge(数剖求lca+树状数组)
- Mybatis中javaType和jdbcType对应关系
- LinuxStudyNote(29)-Linux常用命令(6)-压缩解压命令汇总gzip、gunzip、tar、zip、unzip、bzip2、bunzip2
- 学生信息的输出
- Reverse Linked List II
- 设计模式——抽象工厂模式
- 寻址方式
- 通过js优化web性能
- 混合背包
- JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解
- [APIO2014]序列分割
- 阿里巴巴Java开发手册一周年最终版
- 破解CentOS7 口令的两种方法
- Linux操作系统命令学习第五天