设计模式

一、观察者模式

观察者模式是一种基于事件和响应的设计模式。存在一对多的依赖关系。

常用于游戏中

简单来说观察者的接口为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 来调用私有构造方法。

 

posted @ 2020-11-01 17:01  拿着放大镜看世界  阅读(224)  评论(0编辑  收藏  举报