单例&代理&观察者模式
写设计模式这一系列随笔是为了自己日后参考、复习所用,具有很大的针对性。作者学习设计模式涉及的书籍有Design Patterns、Head First Design Patterns、研磨设计模式,大家如果想深入、或者不懂之处可以从这三本书上下手。
单例模式
定义
一个类只有一个实例,并提供该实例的全局访问点。
类图
关于实现
懒汉:使用时再创建实例,需要注意线程安全;
饱汉:预先创建实例,需要考虑单例资源的占用是否造成浪费;
完美: static内部类(实现延迟加载) + static初始化(解决线程安全)。
作用
节省系统资源。
代理模式
定义
为具体对象提供一个代理,控制对这个对象的访问。
类图
关于动态代理与静态代理
静态代理:是说代理类需要具体持有、实现被代理类的方法,当被代理接口变动时,代理类也需要做出改变;
动态代理:代理类只有一个动态方法,通过反射动态生成被代理类的class来调用被代理类的方法。
作用
远程代理可以实现远程调用、虚代理节省大对象的开销、保护代理可以实现安全控制。
观察者模式
定义
定义对象间一对多的关系,当目标对象发生改变时,其他观察者对象都得到通知。
类图
作用
解耦了目标类与具体观察者;
实现了广播通讯。