关于设计模式的思考——创建型模式
2016-03-17 21:12
477 查看
第一篇blog,边学习边记录吧。虽然是第一次仔细学设计模式,但是在平时的编码中,基本都是用过。把代码抽象成设计模式,有点像武功一样,看着老虎跑,可以创出虎拳,其实就是将最基本的进行有序的组合。下面开始学习吧。
1. 工厂模式
工厂方法模式就是借用工厂的平时运营的方法,来设计程序构建思路。工厂模式的实质是闭包模式,最多能接触的就是工厂对外的接口。一般第三方SDK多采用这种吧?
工厂模式分成三种,普通工厂、多工厂和静态工厂。
下面链接中,有详细介绍,还包括代码。
http://www.cnblogs.com/maowang1991/archive/2013/04/15/3023236.html
我是这么理解的,从场景模式分析,从逆向思考,我们先跳出工厂。
作为一个消费者,我们需要一个东西,如果有熟悉的厂商,那么就直接找熟悉的厂商生产了,不用再去联系其他厂商,节约了很多事情,这就是静态工厂模式。
如果没有熟悉的厂商,那我们就只有花功夫去找一个(new一个),然后将订单交给他们。如果这个工厂的是扁平化管理的,那么就由相关部门直接来对接,就是多工厂模式。如果由一个接待部门负责,然后再将订单分发到相关部门,那么就是单工厂模式了。
2.抽象工厂模式
抽象工厂类的目的是为了更好地扩展功能。工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。
3.单例模式
单例模式比较容易理解,实际中使用也比较多。单例模式能保证在一个虚拟机中,只有一个对象存在。优点如下:
1、某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。
2、省去了new操作符,降低了系统内存的使用频率,减轻GC压力。
3、有些类如交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个的话,系统完全乱了。(比如一个军队出现了多个司令员同时指挥,肯定会乱成一团),所以只有使用单例模式,才能保证核心交易服务器独立控制整个流程。
4.建造者模式
建造者模式就是将多个工厂模式进行集中管理。
5.原型模式
该模式的思想就是将一个对象作为原型,对其进行复制、克隆,产生一个和原对象类似的新对象。在java中就是clone
1. 工厂模式
工厂方法模式就是借用工厂的平时运营的方法,来设计程序构建思路。工厂模式的实质是闭包模式,最多能接触的就是工厂对外的接口。一般第三方SDK多采用这种吧?
工厂模式分成三种,普通工厂、多工厂和静态工厂。
下面链接中,有详细介绍,还包括代码。
http://www.cnblogs.com/maowang1991/archive/2013/04/15/3023236.html
我是这么理解的,从场景模式分析,从逆向思考,我们先跳出工厂。
作为一个消费者,我们需要一个东西,如果有熟悉的厂商,那么就直接找熟悉的厂商生产了,不用再去联系其他厂商,节约了很多事情,这就是静态工厂模式。
如果没有熟悉的厂商,那我们就只有花功夫去找一个(new一个),然后将订单交给他们。如果这个工厂的是扁平化管理的,那么就由相关部门直接来对接,就是多工厂模式。如果由一个接待部门负责,然后再将订单分发到相关部门,那么就是单工厂模式了。
2.抽象工厂模式
抽象工厂类的目的是为了更好地扩展功能。工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。
3.单例模式
单例模式比较容易理解,实际中使用也比较多。单例模式能保证在一个虚拟机中,只有一个对象存在。优点如下:
1、某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。
2、省去了new操作符,降低了系统内存的使用频率,减轻GC压力。
3、有些类如交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个的话,系统完全乱了。(比如一个军队出现了多个司令员同时指挥,肯定会乱成一团),所以只有使用单例模式,才能保证核心交易服务器独立控制整个流程。
4.建造者模式
建造者模式就是将多个工厂模式进行集中管理。
5.原型模式
该模式的思想就是将一个对象作为原型,对其进行复制、克隆,产生一个和原对象类似的新对象。在java中就是clone
相关文章推荐
- Understanding LSTM Networks
- hdu 1016 Prime Ring Problem
- redis列表键的底层实现之链表
- php常用的的全局变量
- c#Com控件开发
- 运行Dos命令并得到dos的输出文本(使用管道函数CreatePipe和PeekNamedPipe)
- Python应用与实践【转】
- Easyui Layout Center 全屏方法扩展
- iOS设置navigationBar背景透明
- PerformanceCounter 性能计数器的使用
- ios学习资料
- 搜索引擎原理 – 正排索引、倒排索引以及齐普夫法则
- Nim游戏博弈
- Bootstrap 提示框
- DRM security
- log4net
- Leetcode 38 Count and Say 传说中的递推
- PAT (Advanced Level) Practise 1063 Set Similarity (25)
- 后缀表达式求值
- ansible playbook 详解