随笔分类 - 【设计模式】
摘要:一,概述 定义:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为之。 优点:客户提出请求时,请求时沿链传递直至有一个ConcreteHandler对象负责处理它二,职责链基本代码#include <iostream>
using namespace std; class Handler
{ protected: static Handler *successor; public: void SetSuccessor(Handler *successor...
阅读全文
摘要:一,概述 定义:命令模式将一个请求或者操作封装到一个命令对象中。允许系统使用不同的请求将客户端参数化,对请求排队或者记录请求日志,提供命令的撤销,恢复能力 优点:1 命令模式使新的命令很容易被加入2 允许接受请求方否决请求3 可较容易地设计一个命令队列4 可以实现对请求的Undo,Redo5 可以将命令计入日志二,示例 两个人 去吃烧烤,先路过一个烧烤摊,人多管理比较混乱,命令请求者跟命令实施者“紧耦合”。 人太对,没吃,然后去烧烤店,遇到了经典的命令模式:服务生负责记录命令,传递命令。厨师负责执行命令。顾客则发出命令 1)烧烤摊代码#include <iostre...
阅读全文
摘要:一,概述 定义:将抽象部分与实现部分分离,使它们都可以独立的变化。 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这就要使用Bridge模式。 【注意】C++中继承声明为 public 二,示例 两款手机,品牌M和品牌N,且每部手机都包含通讯录和游戏。 1)第一种实现 实现: 以手机品牌为抽象基类,手机品牌M、N继承手机品牌基类。 再分别实现M、N中的游戏和通讯录类。 最后用爷...
阅读全文
摘要:一,概述 单例模式确保某一个类只有一个实例,而且自行实例化(自己保存它的唯一实例)并向整个系统提供这个实例。这个类称为单例类。 显然单例模式的要点有三个: 一是某个类只能有一个实例 (本身的初始方法为private,且只有实例为空的时候才建立) 二是它必须自行创建这个实例(作为一个成员方法,返回) 三是它必须自行向整个系统提供这个实例(返回的对象也是static)二,单例模式(C++) 注意: 1)类方法要...
阅读全文
摘要:一,概述 Builder模式的定义是:将一个复杂对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。 首先它意图是要构建一个复杂的对像,而这个复杂的对像往往需要由好几个子对像或分步骤来完成最终的这个对象的构建,而这个复杂对象的子对像经常需要不断的变化,但它的构建过程是相对是稳定的。 精髓:通过一个统一的工序或者约束构造出同一的对象。二,引例 1)构造一个小人,需要有脚、手、身体、头 缺点:这样构造的小人,容易忘记构造手,脚之类的。 void button1_Click(object sender, EventArgs e) ...
阅读全文
摘要:一,概述 外观模式是软件工程中常用的一种软件设计模式。它为子系统中的一组接口提供一个统一的高层接口。使用子系统更容易使用。二,例如 股民买股票,大部分散户自己买股票、国债、房地产,然后到时机抛售。这样就要求每个股民对每支股票都和了解才能保证赚钱,就是说每个股民都要跟一大堆股票打交道。 而更加优化的方法是,股民将钱交给专业的理财机构,定期获利达到双赢。这样股民只需要跟理财机构打交道即可。就是所谓的把一组股票通过理财机构这一个统一的接口调用。1)单个股民投资基金代码#include <iostream>using namespace std; //股票1class Stock1{pub
阅读全文
摘要:一,概述 迪米特法则(Law of Demeter)又叫作最少知识原则(Least Knowledge Principle 简写LKP),就是说一个对象应当对其他对象有尽可能少的了解,不和陌生人说话。英文简写为: LoD 如果两个类不必彼此直接通信,那么这两个类就不应当发生直接相互作用。。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。 在类的架构上,每一个类都应尽量降低成员的访问权限(private)。类之间的松耦合越弱,越容易复用,就是说处在弱耦合中的类容易被修改。二,示例 形象一点的比喻类似于:监狱内的犯人是不应该跟外面的人接触的,当然或许会有探亲的。这里的监
阅读全文
摘要:一,概述 模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构既可以重定义该算法的某些特定步骤 核心思想:抽象类的方法推迟到子类实现。基类示例指向子类实现二,示例老师出考题,学生抄题,然后答题。 1)第一种实现方式 缺点:学生每次都要抄题,而且每个学生类都要重复同样的代码。容易抄错题、难更改。#include <iostream>using namespace std; //学生甲抄的试卷class TestPaperA{public: //试题1 void TestQuestion1() { ...
阅读全文

浙公网安备 33010602011771号