SQL Server读书笔记 |《大话设计模式》之设计模式趣语

PART1、 前言


TOPIC: 23栽设计模式的趣谈

收获

  • 千帆竞发掌握各种设计模式
  • 经设计模式理解
    • 卷入变化、多态
    • 目标中松散耦合
    • 本着接口编程
  • 计划出易维护、扩展、服用、灵活性好之pro

设计模式四地步

1、不见面就此设计模式,代码很烂
2、学了几只模式,胡乱套用要非自知
3、感觉很多模式大相像,不知差异处
4、灵活运用,无剑胜有剑

PART2、创建型设计模式


大概工厂模式

  • 化解实例化哪个目标的问题
  • 工厂类的艺术一般用静态方法,理论及可绝不静态
  • 工厂类用途:创建产品类的实例
  • UML图
Paste\_Image.png
  • 例子:计算器

厂子模式

  • UML图

  • 比较简单工厂好当哪?

    • 简短工厂违背了开放-封闭原则
    • 粗略工厂每次添加效果,都如修改工厂类

原型模式

  • UML图

  • 于内存中克隆对象

    • 减去执行new(构造函数)的次数,提高实践效率
  • 使用:继承IClonable接口,调用clone方法

    • 缺点:MemberWiseClone方法才是浅复制

      • 该办法作用及默认拷贝构造函数相同
    • 贯彻深复制的艺术

      • 1、构造函数中调用clone

      • 2、clone中new对象

      • 作用被拷贝构造函数相同

  • 事例:简历复印

建造者模式

  • uml图
  • 事例:建造小人-头-身-手-腿
  • 事例:快餐流水线模式
  • 以复杂对象的构建与外的象征分离,使同样的构建过程可创不同之代表

空泛工厂模式

  • UML
  • 本质是供接口,创建同多样相关或独立的对象,而休指定这些目标的具体类。
  • 和工厂模式之界别
      • 大抵独泛产品类,每个抽象产品类可以派生出多个具体产品类
      • 一个空洞工厂类,可以派生出多只具体工厂类
      • 每个具体工厂类可创造多个实际产品类似的实例
      • 一个虚幻产品类,可以派生出多独有血有肉产品类
      • 一个华而不实工厂类,可以派生出多单具体工厂类
      • 每个具体工厂类只能创造一个实际产品类似的实例
  • 联系MVC架构,多种类型数据库实现形式

单例模式

  • uml及代码结构

  • 定义

    • 保一个好像就发生一个实例
    • 提供一个看他的大局访问点

PART3、行为型设计模式


政策模式

  • 概念了算法家族,分别封装,各算法的交替不影响用户之操作

  • ps:c#累父类的默认访问级别是:internal

  • 大概工厂及方针模式的歧异

    • 简工厂:
      • instance = new Class(); Class.doSth();
      • 传送相应标准得想如果的靶子,然后通过该目标实现算法的操作
    • 策模式:
      • instance.doSomething();
      • 创办一个相思如果的对象,将欠对象作为参数传递进策略类,通过该目标调用不同的算法
  • UML图

  • 事例:商场收银系统

模板方法模式

  • 以不移的行事放在父类,去除子类中还的代码
  • 事例:.net中之母版模式
  • 心想事成代码复用

观察者模式

  • JAVA中的安装监听器Listener和C#吃之年华响应机制还下了拖欠模式
  • uml图

  • 概念

    • 概念一针对大多的依关系,让多独观察者而监听某平等主题对象
    • 主题对象状态发生变化,会通报所有观察者对象,使她们能自动更新自己
  • 用场合:当一个目标的改观需要而转其他对象的时刻

状态模式

  • 概念:允许一个目标在该内部状态改变时转它们的行为。对象看起似乎修改了她的近乎
  • 利用场景
    • 1、一个对象的表现在它的状态
    • 2、代码中含大量及目标状态有关的规则语句
  • UML图

  • 目的:消除庞杂的规范语句

备忘录模式

  • 定义
    在不损坏封闭的前提下,捕获一个目标的里状态,并以拖欠目标以外保存之状态
  • uml
  • 缺陷:状态数据了多吧,备忘录对象见面杀耗内存

迭代器模式

  • 概念:顺序访问聚合对象被相继要素,且非露内表示
  • 欠模式既内嵌于众编程语言中了
  • uml

命令模式

  • uml

  • 定义

  • 以请封装为目标,将出指令和执行命令的义务分隔开
  • 心想事成行为请求者和行实现者的松耦合

职责链模式

  • 定义
    • 包含了片令对象同同名目繁多的拍卖对象
    • 拍卖目标形成一致修链子
    • 各个一个处理目标说了算其能处理哪些命令对象,不能够处理的通令对象传递给该链中的产一个处理对象
  • uml图

  • 职责链的宏图思想:职责链将请求的发送者和要的处理者解耦

中介者模式

  • 定义

    • 从而一个中介对象来封装一系列之目标交互
    • 由此中介对象来封装对象期间的干,使各个对象在非懂得其他对象的切实可行信息情况下通过中介者对象来和之通信
    • 组织图:类似星型拓扑结构
  • uml图

  • 缺点

    • 急需知道有的求实和事类,封装具体和事类之间相互关系
    • 中介者对象变得非常复杂,系统保护起来比较困难

解释器模式

http://blog.csdn.net/chenssy/article/details/12719973

访问者模式

http://blog.csdn.net/chenssy/article/details/12029633

PART4、结构型设计模式


装点模式

  • 动态为目标上加额外职责
  • 针对曾发生作用动态增长更多力量的一模一样栽办法
  • 好处:区分类的核心职责以及装修功能
  • UML图

  • 例子:穿衣

代理模式

  • 接近回调函数
  • 为表对象提供摄以决定其中对象的看

采用场景:

  • 长距离代理

    • 藏一个对象存在叫不同地方空间的实情
    • 例子:webservice
      `
  • 虚拟代理

    • 浏览器浏览网页原理
    • 由此应用过一个微的目标代理一个雅目标
    • 即得减系统的出
  • 安代理

    • 操纵真实对象看时的权限
  • 智能指引

    • 以及智能指针shared_ptr有什么关联?

UML图

外观模式

  • uml图

  • 例子:炒股&炒基金

  • 事例:三重合架构中层和层中以的虽是外观模式

  • 事例:当大型系统代码臃肿难以维护时,可用外观模式更定义接口,从而达到重构的目的

适配器模式

  • 定义
    管一个接近的接口变换成客户端所欲的外一样栽接口
    Adapter模式使原以接口不配合(或者无兼容)而望洋兴叹以联名干活的少数单近乎能够在协同坐班。
  • UML图

  • 应用场景

    • 零星独像样所做的事务一样或者类似,但来例外接口时以
  • 例子:.net中的DataAdapter

    • 用:用作DataSet和数据源之间的适配器,以便查找和封存数据
    • 多少源可来自SQL Server或者Oracle、mysql,数据组织形式上会出例外
    • DataSet形式:实质是XML数据形式

组合模式

  • 定义
    • 以对象成成树形结构以象征“部分完全”的层次结构
    • 使得用户指向单个对象和构成对象的利用所有一致性
  • uml

  • 利用场景

    • 乃想表示对象的片段-整体层次组织
    • 不经意组合对象以及单个对象的例外

桥接模式

  • uml图

  • 定义

    • 用抽象部分及她的贯彻部分分离,使它们都可独立地扭转
    • 心想事成系统或者产生严密分类,每种分类且或变动
    • 策:多角度分离出来让他们独立变化,减少耦合
  • wiki
    • 将东西对象以及夫现实行为、具体特征分离开来,使它们得以独家独立的变更
    • 例子
      • “圆形”、“三角形”归于抽象的“形状”之下
      • “画圆”、“画三角”归于实现行为的“画图”类以下,然后由“形状”调用“画图”。

享元模式

  • 运作共享技术可行地支撑大气细粒度对象的复用
  • 偌大的缩减系统遭到目标的个数
  • 享元模式由应用了表面状态,外部状态相对独立,不会见潜移默化到内状态,所以享元模式使享元对象能够当不同之条件给共享
  • 缺点:需要区分外部状态与其中状态
  • 用场景:一个体系被有大气的平等或相似之对象

PART5、面向对象相关要点、法则


1、UML图的涉嫌

  • 接口继承关系

  • 涉关系:类内定义关联类

  • 仗关系:传参

  • 集合关系

  • 结关系

2、单一任务规范

  • 就算一个接近而言,仅来一个挑起类变化之原故
  • 软件设计要召开的情节:发现职责,把任务相互分开

3、开放-封闭原则

  • 软件实体(类、模块、函数)推荐扩展,不宜修改
  • 本着扩大开放,对改变封闭
    • 多扩展、少修改
    • 筹出易维护、不易有问题之无限好办法

4、依赖反原则

  • 高层模块不依赖底层模块,而还当负抽象(接口)

  • 架空不依靠细节,而应细节指抽象

  • 对接口编程,不针对落实编程

5、里氏代表换原则

  • 子类型必须能替换掉它的父类型
  • 纵使是能兑现多态?

6、迪米特法则

  • 个别个像样非自然彼此直接通信的话,那么少单近乎非应发径直相互作用
  • 例子:IT部报到,小张,小李
  • 强调松耦合

7、方法了长是坏味道

相关文章