单例、工厂模式简介
2015-08-22 11:05
267 查看
一. 设计模式
a. 什么是设计模式?
设计模式是前人经过多次尝试,总结出来的一套行之有效的处理问题的方法。
比如: 用牛耕田
先预习,再学习,并做好复习,是行之有效的学习方法。
在软件编程方面,如何去写程序,并写好程序,提高复用效率,软件大师们经过长时间的摸索,得出一些写代码的一般规律,我们把它叫做“软件编码设计模式”。
在软件开发历史上,有4个人,俗称“四人帮 (Gang Of Four GOF)”, 他们联合发明了23种设计模式,历史叫GOF23 , 共同编写了一本书:《design pattern》, 设计模式与具体语言无关,可适用于任何面向对象编程语言。
b. 为什么要学习设计模式?
1. 提高代码效率,提高可复用度。 (避免加班)
2. 能看的懂别人(大师)的代码。
二. 具体设计模式
1. 单例模式 (singleton pattern)
适用场合:
1. 创建一个对象成本高昂,需要消耗大量的CPU时间以及内存资源。
比如hibernate的sessionfactory的实例的创建大约要1分钟。
2. 对象之间没有差异(无状态),没有必要创建多个对象。
比如一个类:
Class MathTool{
int[] getScopePrimes(int begin, int end){ }
boolean isPrime(int num) {}
}
一个类,没有属性,对象之间则没有差异,我们把这样的类叫做无状态的类,这样的类的对象可以被广泛复用。
什么叫单例模式?
一个类如果按照单例设计模式书写,这个类在应用程序范围将有且只有一个实例。
技术上如何实现?
1. 完全阻止其它类来创建本类的实例 (只有本类才能创建自己的实例)
本类的构造方法全部为私有的,根据访问修饰符的规范,私有方法只有本类方可调用,如果是其它类则无法调用该方法,就会出现构造方法不可见导致创建实例的失败。
2. 自己确保只创建一个类的实例。
2. 工厂模式 (factory pattern)
在现实生活中,我们一般无须了解某个产品的组装过程,而只需要向商家或者工厂,以文字的形式,说明你所需要的产品,在交付了对应的费用后,对方将直接给予你这个产品的实例,你直接调用就可以了。
由于产品的组装需要一个专业的过程,我们可产品的组装交给一个工厂对象来完成,需要这个产品的用户只要向工厂申请这个产品就可以了。
a. 什么是设计模式?
设计模式是前人经过多次尝试,总结出来的一套行之有效的处理问题的方法。
比如: 用牛耕田
先预习,再学习,并做好复习,是行之有效的学习方法。
在软件编程方面,如何去写程序,并写好程序,提高复用效率,软件大师们经过长时间的摸索,得出一些写代码的一般规律,我们把它叫做“软件编码设计模式”。
在软件开发历史上,有4个人,俗称“四人帮 (Gang Of Four GOF)”, 他们联合发明了23种设计模式,历史叫GOF23 , 共同编写了一本书:《design pattern》, 设计模式与具体语言无关,可适用于任何面向对象编程语言。
b. 为什么要学习设计模式?
1. 提高代码效率,提高可复用度。 (避免加班)
2. 能看的懂别人(大师)的代码。
二. 具体设计模式
1. 单例模式 (singleton pattern)
适用场合:
1. 创建一个对象成本高昂,需要消耗大量的CPU时间以及内存资源。
比如hibernate的sessionfactory的实例的创建大约要1分钟。
2. 对象之间没有差异(无状态),没有必要创建多个对象。
比如一个类:
Class MathTool{
int[] getScopePrimes(int begin, int end){ }
boolean isPrime(int num) {}
}
一个类,没有属性,对象之间则没有差异,我们把这样的类叫做无状态的类,这样的类的对象可以被广泛复用。
什么叫单例模式?
一个类如果按照单例设计模式书写,这个类在应用程序范围将有且只有一个实例。
技术上如何实现?
1. 完全阻止其它类来创建本类的实例 (只有本类才能创建自己的实例)
本类的构造方法全部为私有的,根据访问修饰符的规范,私有方法只有本类方可调用,如果是其它类则无法调用该方法,就会出现构造方法不可见导致创建实例的失败。
2. 自己确保只创建一个类的实例。
2. 工厂模式 (factory pattern)
在现实生活中,我们一般无须了解某个产品的组装过程,而只需要向商家或者工厂,以文字的形式,说明你所需要的产品,在交付了对应的费用后,对方将直接给予你这个产品的实例,你直接调用就可以了。
由于产品的组装需要一个专业的过程,我们可产品的组装交给一个工厂对象来完成,需要这个产品的用户只要向工厂申请这个产品就可以了。
相关文章推荐
- Minimum Size Subarray Sum
- Linux NAT网络连接权威指南
- Struts(17)注释
- Linux NAT网络连接权威指南
- 怎样打开64位 Ubuntu 的32位支持功能?
- 怎样打开64位 Ubuntu 的32位支持功能?
- 用vlc SDK创建一个播放视频文件和RTSP流视频的Demo
- C中->和.的区别
- Linux下Bash的变量使用,echo,read,declare,typeset,array,
- Linux_查看用户所属组
- Ubuntu下SVN客户端RapidSVN
- HttpClient发送post请求,和发送get请求
- Struts简介
- Django with uWSGI and nginx
- Spring Auto scanning components
- 软工视频总结Part Two
- Address localhost:1099 is already in use
- 查看arm linux是硬浮点还是软浮点的方法
- Java-7-数组
- 隐式调用动态链接库(DLL)中的类