设计模式 笔记(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运行程序时类的实例对象唯一存在。
方法: 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
- 设计模式 笔记(2)
- 设计模式(笔记)
- 设计模式学习笔记(2)
- 设计模式笔记(2)---单件模式(创建型)
- java 设计模式 学习笔记 (2) - 工厂方法模式
- 设计模式笔记2:观察者模式(Observer Pattern)
- Head First 设计模式(2)- 观察者模式 笔记
- 【设计模式】学习笔记2:观察者模式(Observer)
- Java设计模式笔记(2)工厂方法模式
- java/android 设计模式学习笔记(2)---观察者模式
- Head First设计模式学习笔记-------(2)观察者模式
- 大话设计模式学习笔记(2)----策略模式
- 设计模式2之策略模式(整理笔记)
- 设计模式笔记(一)
- 设计模式笔记(1)
- 设计模式笔记(转载)
- 设计模式笔记(一)
- 设计模式(学习笔记)
- 关于python中pymysql数据编码问题
- ubuntu 14.04 linux下wifi驱动安装使用的一些笔记
- ubuntu 升级 openssl
- 关于Qt5.70你必须知道的那点事
- 杭电acm——1200
- 设计模式 笔记(2)
- RecyclerView文章汇总
- [LeetCode] 27. Remove Element
- @GeneratedValue 在mysql中的使用
- ThreadPoolExecutor源码解析(基于Java1.8)
- 【例题】【矩阵乘法】NKOJ 3124 珍珠吊坠
- 【POJ1436】Horizontally Visible Segments-线段树区间更新
- Android Activity切换动画 overridePendingTransition
- B - Bear and Five Cards