ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java设计模式学习总结

2018-09-19 23:35:56  阅读:99  来源: 互联网

标签:


设计思想:
面向接口编程;
应对变化(数量、类型、扩展),封装变化;


(一)设计原则
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. 适配器模式
解决接口不兼容问题,完成接口的转换。

标签:
来源: https://www.cnblogs.com/xinxinBlog/p/9678331.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有