文章列表
调停者,观察者,门面模式
- 博客分类:
- 设计模式
调停者(Mediator)模式
调停者模式是常常被滥用的几个模式之一,在下列情况下不应当使用调停者模式。
(1)不应当在责任划分混乱的时候使用
(2)不应当对“数据类”和“方法类”使用
初级设计师常常会设计 ...
备忘录模式又叫快照模式或者Token模式 是对象的行为模式
备忘录模式是备忘录对象保存了发起者对象,在发起者对象变化之后,可以恢复变化之前的状态。
1,备忘录模式的角色:
发起者角色:负责创建备忘录角色,且将当前的对象保存在备忘录对象中去。。
备忘录角色:保存发起者角色的状态。
负责人角色:保存备忘录对象。不负责备忘录角色的内容。
2,模式实例
现在以我们在读书的时候,老是经常用黑板写字。经常想恢复已经被擦掉的文字。以现在以老是想恢复黑板上已经被擦掉的文字。这样一个场景。很适合使用备忘录模式。
首先对角色进行划分。
老师是发起人角色,粉笔是备忘录角色。黑板是是负责人角色。负责 ...
命令模式核心是封装命令类(请求类),每一个命令类作单独的类,分离命令请求者和接受命令执行者。是把请求或者操作封装到一个类中。
命令模式把发出命令和执行命令的责任分割开。
1,命令模式的角色划分:
客户角色:创建命令(请求)对象,确定接收者。
命令角色:抽象命令类接口,提供命令类的统一的抽象接口。
具体命令角色:确定接受者,以及调用接受者的相应方法。
请求者角色:调用命令对象执行请求,发送命令请求,不具有创建命令的功能,仅仅是发送命令。
接受者角色:具体执行一个请求。
2,现在以电脑播放音乐为例,首先对业务场景进行分析。
人是客户端,相当于创建一个个需要播放(录制)音乐的的 ...
责任链模式是一种行为模式。多个处理类组成一个责任链,责任链处理同一个请求,如果处理类不处理就传递给下一个处理类来处理,每个处理类保持对下一个处理类的引用,直到遍历完所有链类直到有类来处理为止。
纯的责任链有两种行为:要么处理掉,要么不处理掉。
不纯责任链:处理器只处理其中一部分请求逻辑,责任链中所有处理器类可以不处理请求。
这里以 病人看病。刚好 脚受伤。。不知道找哪个科室。分别找内科。外科。。皮肤科 最后找到了骨科。到了。骨科医生再也没推辞了。二话不说就给他处理掉了。。
每个科室的医生都各自负责自己分内的事。所有这些科室组织成一个责任链。然后分别找这些科室。。找对了科室就会处理掉 ...
策略模式是比较常用的一种模式.封装不算法。每一个算法封装在不同类中。然后根据客户端的需求。选择相应的算法。
策略模式主要角色:
环境角色:一般会持有策略类的父类引用。
抽象策略角色:提供策略类的共有行为和接口。
具体策略角色:每个策略包装一种算法和行为。
现在以人不同方式回家为例。。把每种回家方式封装成一个不同的算法,分别封装在不同的类中
//抽象回家方式接口。封装一个父类接口
public interface GoHomeStrategy{
//不同回家方式,不同算法行为
public void howGoHome();
}
//走路回家的策略方式。
...
不变模式比较简单,一般设计成一个类或者一个继承等级结构。
不变模式分弱不变模式和强不变模式
弱不变模式:
对象的状态不会改变,不提供任何修改对象状态的方法。所有的属性都是私有的。
子类继承可能存在修改内部对象 的方法。
强不变模式:
类的设计成final类,不可被继承。对象的内部状态初始化时,就固定。不提供任何修改内部状态的方法。如果引用的外部对象是可变的。提供复制之后的引用的外部对象去操作。
优点:
由于不变对象在创建时 就已经初始化了对象的内部状态。所以他是线程安全的。可以被共享的。
缺点:
需要不变对象的状态时。需要重新创建一个新的对象去维护这个状态。导致 ...
桥梁设计是将抽象化和实现化分离。抽象化就是指模型的抽象化,是实现化是行为的实现化。这个是模式讲模型和行为进行分离。然后让各自的两个等级结构各自独立的变化。然后行为的等级结构组合到模型的等级结构中。可以任意组合。实现多项功能。
角色如下:
抽象化角色:实际上是对实体领域对象的抽象,不包含这个实体的行为实体。但是具体子类会保存实现化角色的引用。
修正抽象化角色:这个实际上抽象化角色的子类。但是会和实现化角色组合一起产生新的新的行为。
实现化角色:对领域对象变化的行为的封装。把行为进行抽象化。
具体实现化角色:实现化角色的子类。
实际上桥梁模式对领域对象和行为进行分离的典型应用模式。领域 ...
为什么要 用适配器模式。就是把两个完全不关联或者不相同的类纠合一起时才使用这个模式。 这个模式涉及到角色: 源角色:需要适配的角色。 目标角色:期待使用的接口。 适配器角色:把源角色转化成目标角色。这个是模式的核心。着重转化功能。
适配器模式分两种情况: 类的适配器模式和对象的适配器模式 。
首先来讲讲类的适配器模式:
如下例:
指方为圆的故事。
//方形接口
public interface Square{
//方形具有画方形的功能
public void drawSquare();
//是否是图形
public boolean isGraphical( ...
享元模式的角色划分:
1,抽象享元角色:享元角色需要实现的公共接口。外蕴状态可以通过商业方法以参数的形式传入。
2,具体享角色:负责维护内蕴状态。且提供内蕴含状态的空间。内蕴状态不与环境有关,对象初始化时,内蕴含状态就已经产生。
3,享元工厂角色:负责维护和管理享元角色,在工厂中没有找到相应的享元对象,则负责创建相应的享元对象。
本质工厂角色应该是个享元对象的容器。
4,客户端角色:自行维护外蕴状态,外蕴跟环境有关。
享元模式分单纯享元模式和复合享元模式
这里就讲讲单纯享元模式。 下面以不同口味的冰棒为例。
//冰棒接口
public interface Popsicle ...
装饰器模式的形象理解油漆工刷油漆。油漆工是装饰器角色,被刷者是被装饰器角色。
装饰器分四个角色
抽象构件角色:增加附加功能的一个抽象接口。也就是被装饰的一个抽象角色。
具体构件角色:抽象构件角色的实现类。
装饰器角色:持有抽象构件觉得一个变量引用。切也要与抽象构件角色同一接口。
具体装饰器角色:装饰器角色的实现类。具体附加功能到抽象角色。
说了这么多。。还是用实例来描述比较形象。下面一女孩子不同穿着来说明
譬如女孩子喜欢穿裙子。喜欢咋马尾辫。不同打扮。但是这个女孩子还是没有变。
//女孩接口
public interface Girl{
//女孩子逛街行为
pu ...
组合设计模式(部分-整体设计模式)
主要角色涉及三个
抽象构件角色(component):规定参加参加组合的对象共有的行为,这个接口可以用来管理所有的子对象。
树叶构件角色:参加对象组合的树叶对象。给出add(),remove()之类的方法的平庸实现。一般针对树叶构件的角色不提供add(),remove()等管理子对象的方法。
树枝构件角色:参加组合的对象含有子对象的对象。
组合模式以树结构图的形式去理解。树枝节点可以添加和管理子类元素。树叶节点不具备添加和管理子组件的能力。
所以又分透明式和安全式。
透明式
下面以我的电脑中的文件夹为例,文件可以增加文件。文件不能再添加子文 ...
设计最常遵守的6大原则
第一原则:
“开--闭”原则,一个软件实体(或者说一个模块)对修改关闭,对扩展开放。
针对一个模块。在不修改代码前提下可以被扩展。要做一下两点
1,抽象化,抽象化可以导出不同的具体化。
2,对可变性的封装,原则是多个可变性应该封装在不同的类中
第二原则
里氏代换原则。
1,使用对象的基类,都可以用子类代换。任何使用基类的地方都适用子类
第三原则
依赖倒转原则
抽象不应当依赖与细节,细节不应当依赖抽象
第四原则
接口隔离原则
一个接口都代表一个角色,不应当把不同的角色放在同一个接口里面。否则就是接口污染。
第五原则
优先使用合成/聚合原则
第六 ...