码迷,mamicode.com
首页 > 编程语言 > 详细

Java设计模式学习总结

时间:2018-09-20 01:01:13      阅读:180      评论:0      收藏:0      [点我收藏+]

标签: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. 适配器模式
解决接口不兼容问题,完成接口的转换。

Java设计模式学习总结

标签:get   单例   总结   一个   单例模式   装饰者模式   cut   java   问题   

原文地址:https://www.cnblogs.com/xinxinBlog/p/9678331.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!