设计模式
一、观察者模式
观察者模式是一种基于事件和响应的设计模式。存在一对多的依赖关系。
常用于游戏中
简单来说观察者的接口为Observer,被观察者的接口为subject。当被观察者发生了变化,就会触发,通知所有的观察者做出反应。
二、工厂模式
就是把初始化的复杂且冗余的代码整合到一个类里面。
简单工厂模式: if-else
工厂方法模式: 实现接口
抽象工厂模式: 产品子类分组
三、单例模式
一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。
1.恶汉式单例
没有加锁,效率高
//恶汉式单例
public class Singleton {
private Singleton(){
}
private final static Singleton singleton = new Singleton();
public static Singleton getInstance(){
return singleton;
}
}
[缺点]:类加载时就初始化,浪费内存。
2.懒汉式单例
先不创建,只有调用了才开始创建对象
//懒汉式单例
public class LazySingleton {
private LazySingleton(){
}
private volatile static LazySingleton lazySingleton;
//DCL 双重检测锁模式
public static LazySingleton getInstance(){
if(lazySingleton == null){
synchronized(LazySingleton.class){
if(lazySingleton == null){
lazySingleton = new LazySingleton();
}
}
}
return lazySingleton;
}
}
[缺点]加了锁,效率不高
3.Enum
上面那两种都可以被反射给破解,所以用枚举,它默认就是单例的
这种实现方式还没有被广泛采用,但这是实现单例模式的最佳方法。它更简洁,自动支持序列化机制,
绝对防止多次实例化。这种方式是 Effective Java 作者 Josh Bloch 提倡的方式,它不仅能避
免多线程同步问题,而且还自动支持序列化机制,防止反序列化重新创建新的对象,绝对防止多次实例
化。不过,由于 JDK1.5 之后才加入 enum 特性,用这种方式写不免让人感觉生疏,在实际工作中,
也很少用。不能通过 reflection attack 来调用私有构造方法。