设计模式<二>
来源:互联网 发布:windows字体大小 编辑:程序博客网 时间:2024/05/08 08:38
1、单例模式
需求大部分时候,我们把类的构造器定义成public访问权限,允许任何类自由创建这个类的实例对象,但是某些时候,允许其他类自由创建这个类的对象没有任何意义,还可能造成了系统性能的下降(因为创建一个对象的系统开销问题),例如系统可能自己hi有一个窗口管理器,一个假脱机打印设备或者一个数据库引擎访问点,这个时候如果在系统中创建多个对象就没有太大的时机意义,
如果一个类始终只能创建一个实例,则这个类就被称为单例类
这个时候我们就应该把类的构造器用private修饰,从而把这个类的所有构造器隐藏起来
根据封装型的原则:一旦把类的构造器隐藏起来,就需要提供一个public方法作为这个类的访问点,用于创建这个类的对象,且这个方法必须是static修饰(因为调用这个方法之前还不存在对象,因此调用这个方法不可能是对象,只能是类);
不仅如此,这个类还必须缓存已经创建的对象,不然这个类无法知道是不是已经创建了一个对象,也就无法只保证只创建了一个对象了,为此我们需要提供一个属性来保存曾经创建的对象,因为这个属性要被上面的静态方法访问,所以必须要用static修饰
下面我们用程序来说明这一点[code=java]package cn.itcast.heima
更详细资料:http://www.iteye.com/topic/575052
如果一个类始终只能创建一个实例,则这个类就被称为单例类
这个时候我们就应该把类的构造器用private修饰,从而把这个类的所有构造器隐藏起来
根据封装型的原则:一旦把类的构造器隐藏起来,就需要提供一个public方法作为这个类的访问点,用于创建这个类的对象,且这个方法必须是static修饰(因为调用这个方法之前还不存在对象,因此调用这个方法不可能是对象,只能是类);
不仅如此,这个类还必须缓存已经创建的对象,不然这个类无法知道是不是已经创建了一个对象,也就无法只保证只创建了一个对象了,为此我们需要提供一个属性来保存曾经创建的对象,因为这个属性要被上面的静态方法访问,所以必须要用static修饰
下面我们用程序来说明这一点[code=java]package cn.itcast.heima
class Singleton{ //使用一个变量来缓存曾经创建的实例 private static Singleton instance; //将构造器使用private修饰,隐藏该构造器 private Singleton(){} //提供一个静态方法,用于返回Singleton实例 //该方法可以加入自定义的控制,保证只产生一个Singleton对象 public static Singleton getInstance() { //如果instance为null,表明还不曾创建Singleton对象 //如果instance不为null,则表明已经创建了Singleton对象,将不会执行该方法 if (instance == null) { //创建一个Singleton对象,并将其缓存起来 instance = new Singleton(); } return instance; }}public class TestSingleton{ public static void main(String[] args) { //创建Singleton对象不能通过构造器,只能通过getInstance方法 Singleton s1 = Singleton.getInstance(); Singleton s2 = Singleton.getInstance(); //将输出true System.out.println(s1 == s2); }}
更详细资料:http://www.iteye.com/topic/575052
2、工厂方法模式:
总结网站:http://www.cnblogs.com/cbf4life/archive/2009/12/20/1628494.html
或http://blog.csdn.net/wzhjdls/article/details/27370701
0 0
- 设计模式汇总(二)
- 设计模式二:bridge
- 系统设计模式二
- 设计模式探索二
- 设计模式(二)
- 常用设计模式二
- 设计模式笔录(二)
- 设计模式 二
- 设计模式二
- 设计模式(二)
- 设计模式<二>
- 设计模式(二)
- 设计模式(二)
- PHP设计模式(二)
- 设计模式:二
- 设计模式(二)
- 设计模式二
- 设计模式(二)
- SDB USBIP introduction
- springMVC(二),每天学习一点点~~~~~WebApplicationContext(父子上下文)
- C++11新特性
- android开发中遇到的问题总结
- 智能指针的分析与实现
- 设计模式<二>
- 机器学习中PCA和ICA的理解
- 基于SiC集成技术的生物电信号采集方案
- Roo权限错误
- 消除多路复用DAC的输出错误
- si4463如何读取RSSI
- 类型、值和变量
- 细说 iOS 消息推送
- 在DataTable中执行DataTable.Select("条件"),