设计模式
1.单例模式
定义:
单例模式要求某一类能够有返回对象一个引用(永远是同一个)和一个获得该实例的方法(必须是静态方法,通常使用getInstance这个名称)。
使用场景:
1.需要频繁的进行创建和销毁的对象;
2.创建对象时耗时过多或耗费资源过多,但又经常用到的对象;
3.工具类对象;
4.频繁访问数据库或文件的对象。
创建方式:
// 饿汉式:
public class Singleton{
//创建私有构造方法
private Singleton(){};
//创建私有静态的成员变量并实例化
private final static Singleton instance = new Singleton();
//静态工厂实例
public static Singleton getInstance(){
return instance;
}
}
// 懒汉式:
public class Singleton{
//创建私有构造方法
private Singleton(){};
//创建私有静态的成员变量
private Singleton instance=null;
//静态工厂实例
public static Singleton getInstance(){
if(instance == null){
instance = new Singleton;
}
return instance;
}
}
所谓“懒汉式”与“饿汉式”的区别,是在与建立单例对象的时间的不同。
饿汉式”是在不管你用的用不上,一开始就建立这个单例对象:比如:有个单例对象
“懒汉式”是在你真正用到的时候才去建这个单例对象:
但是他们都有各自的优缺点:
1.饿汉式:
饿汉式优点: 在多线程模式下是安全的
饿汉式缺点:提前创建好对象,如果在整个项目中没有使用,浪费内存资源。
2.懒汉式
懒汉式优点:只有调用方法才创建对象,不会占用内存
懒汉式缺点:线程不安全,在多线程下,一个线程进入了if (singleton == null)判断语句块,还未来得及往下执行,另一个线程也通过了这个判断语句,这时便会产生多个实例。
推荐用法:
public class Singleton{
private Singleton(){};
private static class SingleInstance{
private final static Singleton ins = new Singleton();
}
public static Singleton getInstance(){
return SingleInstance.ins;
}
}
2.工厂模式
定义:
工厂方法模式Factory Method,又称多态性工厂模式。在工厂方法模式中,核心的工厂类不再负责所有的产品的创建,而是将具体创建的工作交给子类去做。该核心类成为一个抽象工厂角色,仅负责给出具体工厂子类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。实现‘开-闭 原则’,实现了可扩展。其次更复杂的层次结构,可以应用于产品结果复杂的场合。
代码实现:
核心类(抽象工厂)
public interface IFactory{
ICar createCar();
}
汽车类
public interface ICar{
void run();
}
public class baomaCar implements ICar{
void run(){...}
}
public class aodiCar implements ICar{
void run(){...}
}
实现具体工厂
public class baomaFactory implements IFactory{
Icar createCar(){ return new baomaCar() }
}
public class aodiFactory implements IFactory{
Icar createCar(){ return new aodiCar() }
}