设计模式之工厂模式
来源:互联网 发布:河南民生频道网络直播 编辑:程序博客网 时间:2024/06/09 20:41
设计模式之工厂模式
简介
工厂模式,设计模式的一种,主要用于生产对象(工厂嘛,就是用来生产物品的,只是这里的物品就是我们的对象。
应用场景
在没有接触工厂模式之前,我们一般在需要用到对象的时候就使用new
操作符直接创建一个对象,这种方式虽然方便,但是却存在一定的弊端:对象的创建跟对象的使用紧密结合在一起,这样带来的一个问题就是对象的使用者需要直接参与对象的创建,对象的创建过程越复杂,对象的使用者需要参与的程度就越深(可是对象的使用者只是需要使用该对象,并不需要知道该对象是怎么产生的,对否?),这个时候,工厂模式就派上用场了。
种类
工厂模式,只是一个抽象的概念,实际上在应用该模式的时候,根据其实现的方式的不用,主要分为三种:
- 简单工厂模式
- 工厂方法模式
- 抽象工厂方法模式(尚未学习)
简单工厂模式
原理及实现
简单工厂模式,是三种实现方式中最简单,也是最好理解的一种,其主要实现方式为提供一个工厂类,然后将对应的创建对象过程交给工厂即可,具体如下代码所示:
// 定义一个对象接口 interface Car{ void run(); } // 分别对应的实现 Audi class Audi implements Car{ @Override public void run() { System.out.println("Audi"); } } // Benz class Benz implements Car{ @Override public void run() { System.out.println("Benz"); } } // 汽车工厂类 class CarFactory { // 提供对外的访问入口,直接通过该方法即可以创建对象 public static Car getCar(String name){ if("Benz".equals(name)){ return new Benz(); }else if("Audi".equals(name)){ return new Audi(); }else{ return null; } } }
这样,当需要汽车的时候,客户只需要通过工厂,并且提供所要的汽车的品牌就能获得对应的对象,这跟现实生活中是吻合的,当我们需要一个汽车的时候,一般是到工厂中跟他们要一个,而不是说自己参与建造汽车的整个过程。
优缺点
优点:工厂方法的优点正如上面所讲述到的,对使用者屏蔽了实现的细节,使得对象的使用与对象的创建分离
缺点:工厂方法的缺点也是非常明显的,从上面工厂中获得对象的方式可以看出,当需要添加新的品牌的汽车(比如说比亚迪)的时候,我们就不得不重新编辑该工厂类,这在某种意义上来说是比较不好的做法,原因在于,当你编辑的时候,可能会由于你的修改而导致原先正常运行的代码出现Bug,这也就是设计原则中的对扩展开放,对修改关闭 原则
工厂方法模式
实现及原理
工厂方法模式可以理解为简单工厂模式的扩充,具体表现为,随着汽车种类的增加,原本的工厂方法已经无法生产总类如此之多的汽车了(宝马各个系、奔驰各个系、奥迪各个系等等),于是乎,将原本由一个工厂方法负责生产的对象抽取出来,由对应的品牌的工厂进行生产(比如宝马汽车的工厂、奔驰汽车的工厂等等),这样,当需要增加新的品牌的汽车的时候,就不需要修改原本的代码了。
这里为了节省空间,复用了上面的Car类以及Benz, Audi类,增加新的抽象工厂接口CarFactory,以及对应的实现类,如下所示
interface CarFactory{ Car getCar();}class BenzFactory implements CarFactory{ @Override public Car getCar() { return new Benz(); }}class AduiFactory implements CarFactory{ @Override public Car getCar() { return new Audi(); }}
从上面的代码中我们可以看出,这看上去更加合理,毕竟,奔驰汽车由奔驰汽车的工厂来生产,宝马汽车由宝马汽车的工厂来生产。
优缺点
- 优点:工厂方法模式看上去更加的合理,也更加的符合日常的规范,将不同类别的产品的生成交付给各自的工厂进行生产,而不是全部由一个工厂来进行生产,更加有利于代码的维护以及升级
- 缺点:增加了许多新的类,代码看上去更加复杂。
总结
这一小节主要学习了简单工厂模式以及工厂方法模式,并且通过具体的代码感受到了工厂模式给我们的带来的好处(屏蔽对象的生成过程,使得对象的使用以及对象的生产分离),设计模式的学习之路还在继续。
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之---工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之-工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之 ------工厂模式
- 设计模式之工厂模式
- 2017微众银行校招实习
- 一个只有99行代码的JS流程框架
- 实例介绍利用valgrind定位内存泄漏问题
- Rsync文件同步
- lightoj 1259
- 设计模式之工厂模式
- 今日头条血槽已空
- Hdu 3966 . Aragorn's Story
- ORA-01950: no privileges on tablespace 'USERS'--解决办法
- 字母变成下一字母
- Java集合(三):Queue队列
- 腾讯云上PhantomJS用法示例
- AngularJS入门
- Unity3D手游开发日记(11)