设计模式 笔记(2)

来源:互联网 发布:网络硬件设备 编辑:程序博客网 时间:2024/06/08 17:26
单例模式 Singleton

目的:在JVM运行程序时类的实例对象唯一存在。
方法: 1.私有的构造方法 2.指向自己实例的私有静态引用 3.以自己实例为返回值的静态的公有的方法

例(还有其他完成方式):
饿汉式
public class Singleton{
private static Singleton singleton = new Singleton(); 
private Singleton(){} 
public static Singleton getInstance(){ 
return singleton; 

}

饱汉式
public class Singleton { 
private static Singleton singleton; 
private Singleton(){} 

//在需要使用时才创建实例对象
//synchronized防止多线程使用时重复创建
public static synchronized Singleton getInstance(){ 
if(singleton==null){ 
singleton = new Singleton(); 

return singleton; 



注:由于反射机制中含有将private转变为public的方法(setAccessible方法),故可以使用反射来创建单例类的多余实例对象。此外,分布式系统、多个类加载器、以及序列化的的情况下,会产生多个单例(JVM识别类唯一要求类由统一类加载器加载、经序列化远程获取对象也可以得到多余单例类对象)

JVM存在垃圾回收机制。意味着当断开引用与实例对象时,实例对象将被回收消除,故不应有断开静态引用与实例对象的行为。

一般可以将单例类作为工具类使用。工具需要多次被应用,但只要存在一个工具就可以满足需求,这点符合单例类性质。如配置文件访问类。


简单工厂模式 Sample Factory
描述:工厂类由用户传入的参数返回给用户所需要的实例对象。
成员:工厂类(creator)、抽象产品(product)、具体产品(concrete product)

抽象产品用于描述产品的基本概念。是所以产品的抽象接口,含有产品必须的所以方法。
具体产品是工厂类生产的实质,实现/继承了抽象产品。
工厂类由特定参数返回特定具体产品。

对象实例化的过程被封装于工厂类,这样需要使用到实例对象的类就可以忽略实例化过程,当我们需要修改所使用的实例对象时只需要去修改工厂类,而不用修改使用类的实例化code。这种做法使code更加结构化。
但是Sample Factory模式若包含了过多类的实例化就会违反“高内聚”的基本原则。

工厂模式可以做到生产过程透明化,即使用者可以只关心所使用到的产品,而其他的细节被封装于工厂类中,是使用者不必理会的。 同时也达到了降耦效果,在使用端不必于复杂的实例化过程挂钩



0 0