设计模式
Beetxm_
这个作者很懒,什么都没留下…
展开
-
设计模式总结——原则合集
1.单一职责原则:就一个类而言,应该仅有一个引起它变化的原因。2.迪米特法则:如果两个类不必彼此直接通信,应该通过第三者转发这个调用,强调每个类尽量降低成员的访问权限。3.依赖倒转原则:高层模块和低层模块不相互依赖,它们都应该依赖于抽象类或接口,4.里氏代换原则:子类型必须能够替换掉它们的父类型。这也是父类复用的前提,举个栗子,以下 Cat 可以替换成 Dog ,而同时不必修改其他...原创 2020-02-11 15:06:45 · 102 阅读 · 0 评论 -
设计模式总结——备忘录模式
用于保存状态,以便恢复状态。举个栗子,游戏中的存档:1.创建备忘录类 RoleStateMemento 。 1.1保存角色状态 attack,defense,hp;2.创建备忘录管理类 RoleStateManager , 维护一个RoleStateMemento 对象。3.创建游戏角色类 Role 。 3.1保存角色状态 attack,defense,hp;...原创 2020-02-11 15:07:16 · 144 阅读 · 0 评论 -
设计模式总结——命令模式
将一个请求封装为一个对象,从而可以对请求排队,记录请求,撤销请求。举个栗子:1.创建执行者 Receiver,实现具体命令,如 Action1(), Action2()。2.创建请求抽象类 Command ,维护一个 Receiver 类型的变量 r 和 Excute()方法。3.创建具体请求类 ConcreteCommand,Excute中调用 r 的 Action1()或 Ac...原创 2020-02-11 15:07:28 · 126 阅读 · 0 评论 -
设计模式总结——桥接模式
将抽象部分和实现部分分离,使它们都可以独立变化。也就是说,当系统有多角度分类,且每个分类都有可能变化时可以使用这个模式。举个栗子,手机可以按品牌分类,也可以按功能分类,且品牌和功能之间属于“聚合”关系,即“品牌包含功能,而功能不属于品牌”:1.功能抽象类;2.具体功能类;3.品牌抽象类,维护一个功能类的变量;4.具体品牌类,调用功能类;这样即使增加功能或者增加品牌...原创 2020-02-10 23:02:59 · 92 阅读 · 0 评论 -
设计模式总结——职责链模式
使多个对象都有机会处理请求,沿着这条链传递请求,直到有对象处理它为止。举个栗子,请假时提交申请,会先经过 HR 审核,再到项目负责人审核:1.创建 Manager 抽象类,维护一个“上级”的变量,和抽象方法 Handle,即“处理请假申请”;2.创建 ProjectManager 和 HRManager, 继承 Manager,方法 Handle 中根据自己的权限判断由自己处理还是“上...原创 2020-02-10 22:46:51 · 87 阅读 · 0 评论 -
设计模式总结——中介者模式(调停者模式)
用一个中介对象来封装一系列对象的交互,使得各个对象之间不需要显式地相互引用。该模式适用于:当一组对象定义良好,但是通信复杂时。使用:1.创建一个中介类 1.1保存各个对象的引用 (这也是这个模式的缺点); 1.2转发调用,方法 Send(消息,指定要转发的对象);...原创 2020-02-10 22:37:22 · 152 阅读 · 0 评论 -
设计模式总结——享元模式
防止创建多个对象,共享代码。但有足够多的对象实例可以共享时才值得用。将对象分成内部状态和外部状态,内部状态可以直接存储在享元对象中,外部状态由客户端存储或计算,当调用享元对象的操作时,再作为参数传过去。举个例子:1.创建外部状态类 User ,存储账号,名字等。2.创建抽象享元类 Website。3.创建具体享元类 ConcreteWebsite ,继承 Website,维护一...原创 2020-02-10 22:26:21 · 114 阅读 · 0 评论 -
设计模式总结——组合模式
将对象组合成树形结构,以表示“部分-整体”的层次结构,使得用户对“单个对象”和“组合对象”的使用具有一致性。也就是说,将对象分成枝节点和叶节点,枝节点维护一个子女节点列表。举个栗子,书本的目录(章节-小结),公司结构(总公司-分公司-具体部门):1.创建 Company 抽象类或接口,定义Add(Company c),Remove(Company c),Display()。2.创建...原创 2020-02-10 22:10:48 · 87 阅读 · 0 评论 -
设计模式总结——观察者模式
定义一对多的依赖关系,让多个观察者对象同时监听主题对象,主题对象在状态发生变化时,会通知所有观察者对象。1.delegate void EventHandler() 声明一个特殊的“类”。2.public event EventHandler Update() 声明一个事件委托的变量。3.Update += new EventHandler(方法) 创建委托实例,等于把方法委托给 Up...原创 2020-02-10 21:58:18 · 560 阅读 · 0 评论 -
设计模式总结——访问者模式
把数据结构和操作分离开,使得操作可以自由演化。该模式用于数据结构相对稳定的系统。也就是说,把操作封装成一个个类,每个操作类都要定义好对每种数据结构的操作。举个栗子,假设当前有数据结构 A 和 B,操作 1 和操作 2 :1.创建访问者抽象类 Visitor,定义对数据结构 A, B 的操作方法 HandleA(), HandleB() 。2.创建具体访问者类 Concr...原创 2020-02-10 16:43:46 · 136 阅读 · 0 评论 -
设计模式总结——状态模式
当对象状态转换的条件过于复杂时,把状态定义成一系列类,并将状态的判断逻辑转移各个类当中。举个栗子,12 点时切换到状态 B,否则为状态 A:1.Player 类维护一个 State 变量作为当前状态。2.定义 State 抽象状态类。包含一个 Handle 方法 ,该方法接受一个 Player 参数。3.创建 ConcreteStateA 和 ConcreteStateB ,继承...原创 2020-02-10 16:13:25 · 99 阅读 · 0 评论 -
设计模式总结——迭代器模式
提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露其内部表示。该模式也就是 c# 和 Java 的 foreach-in。举个栗子:1.创建集合抽象类 Aggregate。2.创建具体集合类 ConcreteAggregate,继承Aggregate。 2.1维护一个 IList 泛型变量 list,也可以用 ArrayList; 2.2提供 Count 方法(返...原创 2020-02-10 15:36:46 · 132 阅读 · 0 评论 -
设计模式总结——装饰模式
当需要在主类中加入新的字段,方法或逻辑,而它们只是在某种特定情况下才会用到时,可以使用这个模式。该模式可以把核心职责与装饰功能区分开,对“增加功能”来说比较灵活。举个栗子,需要在玩家类当中添加“穿戴袜子”,“穿戴鞋子”的功能:1.创建 Player类,并定义 Show 方法。2.定义服饰类 Finery ,该类继承 Player。由于袜子和鞋子存在穿戴顺序的问题,即需要先穿戴袜子再...原创 2020-02-10 15:00:58 · 122 阅读 · 0 评论 -
设计模式总结——代理模式
代理模式即 在访问对象的时候,引入一定程度的间接性,实现“当调用代理,从而调用实体”。分为“代理”和“实体”,“代理”和"实体"具有相同的接口,“代理”引用“实体”,并在共同的方法中调用“实体”。1.定义代理和实体的共同接口 Subject。2.RealSubject(实体),ProxySubject(代理)继承Subject。3.ProxySubject(代理)保存一个实体的引用...原创 2020-02-09 17:58:28 · 114 阅读 · 0 评论 -
设计模式总结——抽象工厂模式
抽象工厂是指当有多个抽象角色时使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体情况下,创建多个产品族中的产品对象。抽象工厂模式相对于工厂模式来说,就是工厂方法模式是针对一个产品系列的,而抽象工厂模式是针对多个产品系列的,即工厂方法模式是一个产品系列一个工厂类,而抽象工厂模式是多个产品系列一个工厂类。举个栗子,当项目中需要接入多个 SDK,每种 S...原创 2020-02-09 17:43:26 · 248 阅读 · 0 评论