随笔分类 -  设计模式

摘要:一:一个目标 二:两种手段 三:八大原则 四:重构技法 五:从封装变化角度对模式分类 六:类图对比 对比所有模式的类图,几乎所有模式的结构都归属到:下面第三种类型 七:关注变化点和稳定点 八:什么时候不用模式 九:经验之谈 十:设计模式成长之路(4阶段) 阅读全文
posted @ 2018-08-28 20:21 山上有风景 阅读(320) 评论(0) 推荐(1)
摘要:前提:领域规则模式 典型模式 一:解释器模式Interpreter (一)概念 (二)动机 (三)代码分析(加减运算) 0.表达式基类 1.构建变量表达式(叶子结点) 2.符号表达式(树结点基类) 3.符号表达式子类实现(树结点),进行执行 4.解析表达式(获取的是解析的表达式,不是结果) 5.表达 阅读全文
posted @ 2018-08-28 19:02 山上有风景 阅读(1810) 评论(0) 推荐(0)
摘要:一:概念 二:动机 三:代码讲解 (一)原代码 需求:想要增加一个新的功能 (二)visitor模式 >前提:能够预料到未来可能会为这整个类层次结构添加新的操作,但是我不知道要加多少操作,什么操作 1.预先设计Element基类 2.完善visitor基类 3.element子类实现 上面实现了:预 阅读全文
posted @ 2018-08-28 18:05 山上有风景 阅读(322) 评论(0) 推荐(0)
摘要:前提:行为变化模式 典型模式 一:Command模式 (一)概念 (二)动机 (三)模式定义 (四)代码讲解 1.命令基类,定义接口 2.具体行为命令,继承自Command 3.命令组合 4.创建命令执行 (五)类图(结构) (六)要点总结 1.Command模式的根本目的在于“行为请求者”与“行为 阅读全文
posted @ 2018-08-28 15:42 山上有风景 阅读(382) 评论(0) 推荐(0)
摘要:一:概念 二:动机 三:模式定义 四:代码讲解 (一)Request对象:携带请求信息 (二)ChainHandler基类处理者: (三)Handler具体处理对象 (四)构建链表 五:类图(结构) 六:要点总结 (一)Chain of Responsibility模式的应用场合在于“一个请求可能有 阅读全文
posted @ 2018-08-28 11:08 山上有风景 阅读(543) 评论(0) 推荐(0)
摘要:一:概念 在应用Iterator模式之前,首先应该明白Iterator模式用来解决什么问题。或者说,如果不使用Iterator模式,会存在什么问题? 以上方法1与方法2都可以实现对遍历,这样有问题呢? 所以,Iterator模式的应用场景可以归纳为满足以下几个条件: 二:动机 三:模式定义 四:类图 阅读全文
posted @ 2018-08-28 09:52 山上有风景 阅读(747) 评论(0) 推荐(0)
摘要:前提:数据结构模式 典型模式 一:组合模式 (一)概念 (二)动机 (三)模式定义 (四)代码讲解 1.抽象接口 2.两种类型之一:树形结构 2.两种类型之一:叶子节点 3.客户程序 4.实现构建树 问题:若是不用composite模式,如何实现? 会导致: (五)类图(结构) 类比文件系统: (六 阅读全文
posted @ 2018-08-28 09:04 山上有风景 阅读(686) 评论(0) 推荐(0)
摘要:一:概念 二:应用场景 如果一个对象需要保存状态并可通过undo或rollback等操作恢复到以前的状态时,可以使用Memento模式。 三:动机 四:模式定义 五:代码讲解 (一)需要保存状态的对象 补充: (二)外部保存对象状态的类 (三)使用 六:类图(结构) 七:要点总结 (一)备忘录(Me 阅读全文
posted @ 2018-08-28 08:35 山上有风景 阅读(282) 评论(0) 推荐(0)
摘要:前提:状态变化模式 典型模式 一:State状态模式 (一)概念 (二)动机 (三)代码讲解 1.原代码 2.改进代码,将基类抽出 (四)模式定义 (五)类图(结构) (六)要点总结 1.State模式将所有与一个特定状态相关的行为都放入一个State的子类对象中,在对象状态切换时, 切换相应的对象 阅读全文
posted @ 2018-08-28 08:11 山上有风景 阅读(820) 评论(0) 推荐(0)
摘要:一:概念 二:动机 三:模式定义 四:结构 五:与Facade模式比较 六:类图 七:要点总结 (一)将多个对象间复杂的关联关系解耦,Mediator模式将多个对象间的控制逻辑进行集中管理(定义一套调用机制的协议),变“多个对象互相关联”为“多个对象和一个中介者关联”,简化了系统的维护,抵御了可能的 阅读全文
posted @ 2018-08-28 07:30 山上有风景 阅读(306) 评论(0) 推荐(0)
摘要:一:概念 二:动机 三:模式定义 四:类图(结构) 五:代码讲解 六:要点总结 (一)Adapter模式主要应用于“希望复用一些现存的类,但是接口又与服用环境要求不一致的情况”,在遗留代码复用、类库迁移等方面非常有用。 (二)GoF23定义了两种Adapter模式的结构实现:对象适配器和类适配器。但 阅读全文
posted @ 2018-08-27 10:49 山上有风景 阅读(347) 评论(0) 推荐(0)
摘要:一:概念 二:动机 三:模式定义 四:类图(结构) 五:代码讲解 (一)原代码 (二)代理版本 六:要点总结 (一)“增加一层间接层”是软件系统中对许多复杂问题的一种常见解决方案。在面向对象系统中,直接使用某些对象会带来很多问题,作为间接层的Proxy对象便是解决这一问题的常用手段。 (二)具体Pr 阅读全文
posted @ 2018-08-27 10:20 山上有风景 阅读(787) 评论(0) 推荐(0)
摘要:前提:接口隔离模式 典型模式: 一:门面模式(外观模式) 推文:外观模式 Facade Pattern (一)概念 (二)动机 (三)系统间耦合的复杂度 (四)模式定义 (五)结构(没有特定的模式) (六)要点总结: (将子系统的变化限制在一个范围内) 1.从客户程序的角度来看, Façade 模式 阅读全文
posted @ 2018-08-27 09:49 山上有风景 阅读(781) 评论(0) 推荐(0)
摘要:一:概念 二:动机 三:模式定义 四:代码讲解 五:类图(结构) 六:要点总结 (一)面向对象很好的解决了抽相性的问题,但是作为一个运行在机器中的程序实体,我们需要考虑对象的代价问题。Flyweight主要解决面向的代价问题,一般不触及面向对象的抽象性问题。 (二)Flyweight采用对象共享的做 阅读全文
posted @ 2018-08-27 09:24 山上有风景 阅读(182) 评论(0) 推荐(0)
摘要:前提:“对象性能”模式 面向对象很好的解决了“抽象”的问题,但是必不可免地要付出一定的代价。对于通常情况来讲,面向对象的成本大都可以忽略不计。但是某些情况,面向对象所带来的成本必须谨慎处理。 前面是利用抽象手段来实现松耦合的设计,但是抽象必不可免的会带来一定代价,比如虚函数(倍乘) 典型模式: 单件 阅读全文
posted @ 2018-08-27 08:29 山上有风景 阅读(501) 评论(0) 推荐(0)
摘要:一:概念 二:动机 三:代码解析(建造房子) 四:模式定义 五:进一步优化(对象过于复杂,除了上面步骤还有其他方法和属性) 六:类图(结构) 七:要点总结 (一)Builder模式主要用于“分步骤构建一个复杂对象”。在这其中“分步骤”是一个稳定算法,而复杂对象的各个部分则经常变化。 (二)变化的点在 阅读全文
posted @ 2018-08-26 19:39 山上有风景 阅读(755) 评论(0) 推荐(0)
摘要:一:概念 二:动机 三:代码讲解 (一)原代码 //具体类 class BinarySplitter : public ISplitter{ }; class TxtSplitter: public ISplitter{ }; class PictureSplitter: public ISplit 阅读全文
posted @ 2018-08-26 16:59 山上有风景 阅读(336) 评论(0) 推荐(0)
摘要:一:概念 二:动机 三:和工厂方法模式区别 四:代码讲解(连接不同数据库) (一)原代码 问题提出: (二)支持面向接口编程 (三)添加工厂 新的问题: (四)引出抽象工厂 五:模式定义 六:类图(结构) 七:要点总结 (一)如果没有应对“多系列对象构建”的需求变化,则没有必要使用 Abstract 阅读全文
posted @ 2018-08-26 14:42 山上有风景 阅读(442) 评论(0) 推荐(1)
摘要:前提:“对象创建”模式 典型模式(表现最为突出) 一:工厂方法模式 (一)概念 (二)动机 (三)代码讲解(同文件分割)问题提出 1.原代码 2.改进为抽象基类 (三)代码讲解(同文件分割)问题解决 1.改进一 2.改进二:使用虚函数 3改进三:将工厂基类和抽象类解耦 4.根据具体类创建一些类的具体 阅读全文
posted @ 2018-08-26 11:01 山上有风景 阅读(463) 评论(0) 推荐(0)
摘要:一:概念 二:动机 三:代码讲解(通信) (一)原代码 编译时装配:(我们查看Decorator模式中运行时装配) (二)改进业务抽象由继承转组合 (三)改进将子类转基类,实现在未来实现子类 (四)发现两个类只是类名不同所以我们可以去重复 (五)发现问题:接口规范出现问题(举一例) 1.在红一处:我 阅读全文
posted @ 2018-08-25 14:14 山上有风景 阅读(485) 评论(0) 推荐(0)