文本描述
1、???法模式(利?创建同?接?的不同实例): 1、普通??模式:建??个??类,对实现了同?接?的?些类进?实例的创建; 1 public class SendFactory { 2 3 public Sender produce(String type) { if ("mail".equals(type)) { return new MailSender(); } else if ("sms".equals(type)) { return new SmsSender(); } else { 4 5 6 7 8 9 System.out.println("请输?正确的类型!"); return null; 10 11 12 13 } } } 2、多个???法模式:提供多个???法,分别创建对象; 1 public class SendFactory { 2 3 public Sender produceMail(){ 4 return new MailSender(); } 5 6 7 public Sender produceSms(){ 8 return new SmsSender(); } 9 10 } 3、静态???法模式:将上?的多个???法置为静态的,不需要创建??实例,直接调?即可; 4、适?场景:凡是出现了?量不同种类的产品需要创建,并且具有共同的接?时,可以通过???法模式进?创建。在以上的三种模式 中,第?种如果传?的字符串有误,不能正确创建对象,第三种相对于第?种,不需要实例化??类,所以,?多数情况下,我们会选?第三种——静 态???法模式。 2、抽象??模式(多个??):创建多个??类,提???的扩展性,不?像上??样如果增加产品则要去修改唯?的??类; 3、单例模式(保证对象只有?个实例):保证在?个JVM中,该对象只有?个实例存在; 1、适?场景: 1、某些类创建?较频繁,对于?些?型的对象,这是?笔很?的系统开销。 2、省去了new操作符,降低了系统内存的使?频率,减轻GC压?。 3、有些类如交易所的核?交易引擎,控制着交易流程,如果该类可以创建多个的话,系统完全乱了。(?如?个军队出现了多个司 令员同时指挥,肯定会乱成?团),所以只有使?单例模式,才能保证核?交易服务器独?控制整个流程。 2、代码: 1 public class Singleton { 2 3 /* 持有私有静态实例,防?被引?,此处赋值为null,?的是实现延迟加载 */ 4 private static Singleton instance = null; 5 6 /* 私有构造?法,防?被实例化 */ 7 private Singleton() { } 8 9 10 11 12 13 14 15 /* 静态?程?法,创建实例 */ public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; 16 } 17 18 /* 如果该对象被?于序列化,可以保证对象在序列化前后保持?致 */ 19 public Object readResolve() { 20 return instance; } 21 22 } 3、分类: 1、饿汉式:类初始化时创建单例,线程安全,适?于单例占内存?的场景,否则推荐使?懒汉式延迟加载; 1 public class Singleton{ 2 private static Singleton instance = new Singleton(); 3 private Singlet