标签:get 单例 总结 一个 单例模式 装饰者模式 cut java 问题
设计思想:
面向接口编程;
应对变化(数量、类型、扩展),封装变化;
(一)设计原则
1. 封装变化
2. 多用组合,少用继承
3. 针对接口编程,不针对实现编程
4. 为交互对象之间的松耦合设计而努力
5. 开闭原则(对扩展开放,对修改关闭)
6. 依赖倒置原则:要依赖抽象,不要以来具体类
*变量不可以持有具体类的引用
*不要让类派生自具体类
*不要覆盖基类中已实现的方法
(二)设计模式
1. 策略模式(StrategyPattern)
解决算法族的动态切换及扩展性问题
2. 观察者模式(ObserverPattern)
use: Observable/Observer
解决一对多的通知以及被通知者的动态扩展问题
3. 装饰者模式(DecoratorPattern)
职责扩充
eg.InputStream->FilterInputStream
借用继承实现相同接口对象的引用及扩展,赋予新的职责
(动态的将责任附加到对象上,用于扩展功能)
4. 工厂方法模式(FactoryPattern)
use:FactoryClass/Abstract Factory(abstract createComponent)
封装实现,应对实例化类型及数量的变化。
通过Abstract类声明工厂方法,子类继承并分别实现工厂方法。
工厂方法将类的实例化推迟到了子类。
误区:简单工厂方法被误认为是工厂模式。简单工厂类提供一个create方法,
直接将生产过程放在该方法中实现。和工厂方法的abstract方法有所区分。
5. 抽象工厂模式
提供一个接口,用于创建相关或依赖对象的家族,而不需要指定具体类。
6. 单例模式(Singleton)
线程不安全:
普通方式
线程安全三种方式:
同步getInstance()方法(最差)
急切实例化(类初始化时直接将变量实例化)
双重检验加锁:延迟实例化的最佳方案
7. 命令模式
将请求封装成对象
完成操作与实现的解耦(打包运算块),还可以实现撤销。
Invoker: SetCommand(command); event=> command.execute();
Command: command.execute(); command.undo();
应用:
a. 产出命令后,放入commandQueue,专门的线程池负责从commandQueue中取command执行
b. 记录已执行但未彻底结束的操作,持久化到硬盘,实现异常恢复(未保存的word操作)
8. 适配器模式
解决接口不兼容问题,完成接口的转换。
标签:get 单例 总结 一个 单例模式 装饰者模式 cut java 问题
原文地址:https://www.cnblogs.com/xinxinBlog/p/9678331.html