设计模式
2017-11-17 15:11:09 216 举报
AI智能生成
设计模式
作者其他创作
大纲/内容
创建型模式
简单工厂模式
适用环境
<span>工厂类负责创建的对象比较少</span>
<span>客户端只知道传入工厂类的参数,对于如何创建对象不关心</span>
应用
<pre><span>KeyGenerator</span> <span>keyGen</span><span>=</span><span>KeyGenerator</span><span>.</span><span>getInstance</span><span>(</span><span>"DESede"</span><span>);</span></pre>
<pre><span>Cipher</span> <span>cp</span><span>=</span><span>Cipher</span><span>.</span><span>getInstance</span><span>(</span><span>"DESede"</span><span>);</span></pre>
工厂方法模式
http://design-patterns.readthedocs.io/zh_CN/latest/_images/FactoryMethod.jpg
与简单工厂相比,用工厂实体类代替了参数
抽象工厂模式
http://design-patterns.readthedocs.io/zh_CN/latest/_images/AbatractFactory.jpg
适用环境
<span>系统中有多于一个的产品族,而每次只使用其中某一产品族</span>
应用
<span>在很多软件系统中需要更换界面主题,要求界面中的按钮、文本框、背景色等一起发生改变时</span>
建造者模式
http://design-patterns.readthedocs.io/zh_CN/latest/_images/Builder.jpg
适用环境
创建复杂对象
部分与主体之间紧密结合,不可分离
应用
<span>人物角色包括人体、服装、装备等组成部分</span>
单例模式
适用环境
<span>一是某个类只能有一个实例</span>
应用
<span>主键编号生成器</span>
结构型模式
适配模式
http://design-patterns.readthedocs.io/zh_CN/latest/_images/Adapter.jpg
适用环境
<span>系统需要使用现有的类,而这些类的接口不符合系统的需要</span>
应用
<span>抽象的JDBC接口和各个数据库引擎API之间都需要相应的适配器软件</span>
代理模式
http://design-patterns.readthedocs.io/zh_CN/latest/_images/Proxy.jpg
适用环境
<span>远程(Remote)代理:为一个位于不同的地址空间的对象提供一个本地 的代理对象</span>
<span>虚拟(Virtual)代理:如果需要创建一个资源消耗较大的对象,先创建一个消耗相对较小的对象来表示,真实对象只在需要时才会被真正创建</span>
<span>缓冲(Cache)代理:为某一个目标操作的结果提供临时的存储空间,以便多个客户端可以共享这些结果</span>
应用
RPC框架
设置缓存
装饰模式
http://design-patterns.readthedocs.io/zh_CN/latest/_images/Decorator.jpg
适用环境
<span>需要动态地给一个对象增加功能,这些功能也可以动态地被撤销</span>
应用
输入、输出流
外观模式
适用环境
<span>要为一个复杂子系统提供一个简单接口时可以使用外观模式</span>
<span>系统中每一层的入口,层与层之间不直接产生联系</span>
应用
springMVC模式
享元模式
适用场景
<span>一个系统有大量相同或者相似的对象,由于这类对象的大量使用</span>
应用
String=“ABCD”
组合模式
子主题
适用场景
<span>一个对象整体或部分层次,在具有整体和部分的层次结构中,希望通过一种方式忽略整体与部分的差异,可以一致地对待它们。</span>
应用
树型结构
UML
继承
<br>
<span>代码表现:泛化关系表现为继承非抽象类</span>
实现
<br>
代码表现:实现关系表现为继承抽象类
组合
<span>一种强依赖的特殊聚合关系,如果整体不存在了,则部分也不存在了</span>
代码表现:部分由整体在初始化时创建
聚合
<span>整体和部分不是强依赖的,即使整体不存在了,部分仍然存在</span>
代码表现:部分set到整体
关联
代码表现:<span>关联对象通常是以成员变量的形式实现的</span>
依赖
代码表现:<span>类构造方法及类方法的传入参数,箭头的指向为调用关系</span>
行为型模式
中介模式
适用场景
<span>使用中介者模式可以将对象间一对多的关联转变为一对一的关联,使对象间的关系易于理解和维护</span>
应用
<span>Controller 作为一种中介者,它负责控制视图对象View和模型对象Model之间的交互</span>
命令模式
适用场景
<span>系统需要将请求调用者和请求接收者解耦,使得调用者和接收者不直接交互</span>
应用
遥控器-电视
观察者模式
适用场景
<span>一个对象的改变将导致其他一个或多个对象也发生改变</span>
应用
kafka
<span>某团队战斗游戏中某队友牺牲将给所有成员提示等等</span>
状态模式
适用场景
<span>这些状态之间可以发生转换时使用状态模式</span><br>
<span>代码中包含大量与对象状态有关的条件语句</span>
应用
<span>工作流</span>
策略模式
http://design-patterns.readthedocs.io/zh_CN/latest/_images/Strategy.jpg
适用场景
<span>某个类的某一行为存在多种实现方式</span>
<span>动态地让一个对象在许多行为中选择一种行为</span>
应用
责任链模式
适用场景
<span>有多个对象可以处理同一个请求,具体哪个对象处理该请求由运行时刻自动确定</span>
应用
请假审批
备忘录模式
适用模式
<span>保存一个对象在某一个时刻的状态或部分状态</span>
应用
<span>挑战BOSS之前,保存</span>
0 条评论
下一页