一.单例设计模式
特点:仅且只有一个实例对象,构造方法必须私有化,加载先后分饿汉式与懒汉式,除此外,还包括工厂模式创建对象
饿汉式单例模式:一旦加载就创建对象
class Singleton {
//私有,静态的类自身实例
private static Singleton instance = new Singleton();
//私有的构造子(构造器,构造函数,构造方法)
private Singleton(){}
//公开,静态的工厂方法
public static Singleton getInstance() {
return instance;
}
}
饿汉式变种形式
class Singleton {
//私有,静态的类自身实例
private static Singleton instance = null;
static{
instance = new Singleton();
}
//私有的构造子(构造器,构造函数,构造方法)
private Singleton(){}
//公开,静态的工厂方法
public static Singleton getInstance() {
return instance;
}
}
懒汉式单例模式,延迟加载对象,多线程并发需同步
class Single
{
//私有构造方法,不允许其他类创建对象
private Single(){};
private static Single instance =null;
//提供获取对象的方法
public static Single getInstance()
{
//提高判断锁的效率不让每次都判断
if(instance==null)
//多线程的同步操作,锁是自身的字节码
synchronized (Single.class)
{
if(instance==null)
//自己创建对象
instance = new Single();
}
return instance;
}
}
静态内部类实现 ,线程安全
class Singleton {
private static class SingletonHandler{
private static final Singleton instance = new Singleton();
}
public Singleton static final getInstance(){
return SingletonHandler.instance;
}
}
枚举单例模式
public enum Sigleton{
INSTANCE;
public static Sigleton getInstace(){
return INSTANCE;
}
}
-------------------------------------------------------------------------------------------------------------------------
二.模板方法设计模式
做一个抽象类,给出具体方法实现逻辑部分,声明抽象方法由子类实现,不同子类就有不同的实现
结构图:
抽象模板
public class AbstractTempleate{
public void A(){
B();
C();
}
public abstract void B();
public void C(){
};
}
具体模板
public class ConcreteTemplate1 extends AbstractTemplate{
public void B(){
// 具体实现
}
}
具体模板
public class ConcreteTemplate2 extends AbstractTemplate{
public void B(){
// 具体实现
}
}