zoukankan      html  css  js  c++  java
  • [设计模式] 23种设计模式总结

    创建型:在创建对象的同时隐藏创建逻辑

    工厂

    • 目的:生成跨平台对话框
    • 结构:工厂类 [ ( 实体接口 ) 获取对象 ],实体接口 ( 抽象方法 ),实体类( 具体方法 )
    • 中间层:将创建过程抽象为工厂类
    • 接口化:将对话框动作抽象为接口
    • 对象化:将具体平台对话框抽象为对象

    构建器

    • 目的:生成肯德基套餐
    • 结构:构建器类[ ( 套餐 ) 创建套餐 ],套餐类( 单品<> ) [ 增加单品( 单品 ) ],单品接口,单品类
    • 中间层:将构建步骤抽象为中间类,包含接口变量
    • 接口化:将构建动作抽象为接口
    • 对象化:将具体构建过程抽象为对象

    原型

    • 目的:生成重复对象
    • 结构:缓存类( 实体<>) [ ( 实体接口 ) 获取实体 ],实体接口,实体类
    • 中间层:将构建步骤抽象为中间类,包含接口变量
    • 接口化:将克隆动作抽象为接口
    • 对象化:将具体构建过程抽象为对象

    结构型:关注类和对象的组合

    桥接

    • 目的:画出不同颜色的圆
    • 结构:画笔接口[ 绘制 ],具体颜色画笔类 [ 绘制 ],抽象形状类( 画笔 )[ 绘制],具体形状类[ 绘制 ]
    • 中间层:将控制步骤抽象为中间类,包含接口变量
    • 接口化:将画的动作抽象为接口,连接使用者和具体颜色类
    • 对象化:将不同颜色的圆抽象为对象

    适配器

    • 目的:方钉适配圆孔
    • 结构:圆洞类 [ 适配 ( 圆钉 ) ],圆钉类,适配器类( 方钉 ) ,方钉类
    • 中间层:将方钉适配器抽象为中间类,继承圆钉类(或实现相同接口),同时包含方钉类变量(动作一样,即可看作一类)

    组合

    • 目的:树形菜单,文件夹管理
    • 结构:文件夹类( 文件夹<> )
    • 接口化:将所有对象的动作抽象为接口
    • 递归结构:一个类中包含自身对象的容器

    装饰

    • 目的:为画增加画框
    • 结构:画接口[ 展示 ],具体画类[ 展示 ],画框抽象类( 画 )[ 展示 ],具体画框类( 画 )[ 展示 + 修饰]
    • 接口化:原对象和装饰类实现相同的接口,在装饰类中添加功能

    外观

    • 目的:通过接线员与仓库、支付、供货商等所有环节沟通
    • 结构:接线员类( 具体部门 )[ 具体答复 ],部门接口[ 答复 ],具体部门类[ 具体答复 ]
    • 中间层:在客户端和具体部门间增加接线员,通过接线员调用具体部门

    享元

    • 目的:复用对象中相同的部分,以节省内存
    • 结构:形状接口,具体形状类,形状工厂( < 内部状态 , 形状 > )[ ( 形状 ) 创建形状( 内部状态 ) ]
    • 分拆:将对象状态分为内部(稳定)和外部(变化)
    • 中间层:用工厂类根据对象状态控制对象的创建

    代理

    • 目的:为对象提供代理以控制该对象的访问,以减少加载时的内存占用
    • 结构:图形接口[ 展示 ],实际图形类[ 展示 ],代理图形类( 实际图形 )[ 展示 ]  
    • 接口化:代理类和实际类都实现相同的接口
    • 中间层:代理类中包含实际类对象,从而可以调用实际类的方法

    行为型:关注对象间的通信

    责任链

    • 目的:逐级传递指令,并在中途加以控制
    • 结构:抽象日志类( 下级日志 ) [ 设置下级、记录、获取记录 ],具体日志类 [ 设置下级、记录、获取记录 ]
    • 抽象化:客户端与抽象命令交互,具体命令扩展抽象命令,并在自己的类中添加控制

    命令

    • 目的:仓库和市场通过中间商完成交易,而不需直接交互
    • 结构:订单接口 [ 动作 ],具体订单类( 仓库 ) [ 动作 ],仓库类 [ 买入,卖出 ],中间商类( 订单<> ) [ 接单,派送 ]
    • 中间层:中间商作为中间层,完成接单和派送
    • 接口化:具体订单(买单、卖单)实现订单接口

    迭代器

    • 目的:遍历集合元素,而不需要知道集合的底层表示
    • 结构:容器接口[ ( 迭代器 ) 获取 ],容器类[ ( 迭代器 ) 获取 ],迭代器接口[ 是否到头,前进 ],迭代器类
    • 接口化:将集合和迭代器抽象为接口,由具体的集合和对应迭代器实现
    • 内部类:容器包含迭代器

    中介者

    • 目的:用户将留言发到聊天室,聊天室显示所有人的留言
    • 结构:用户类 [ 发送消息 ],聊天室类 [ 显示消息 ( 用户 ) ]
    • 类通信:用户作为聊天室发送消息方法的参数,用户类中直接调用聊天室的方法(静态方法,不需实例化即可访问)

    备忘录

    • 目的:将系统恢复到用户操作前的状态
    • 结构:备忘录类(状态、时间),记录者类(备忘录容器、原发器)[备份、撤销],原发器类[记录、恢复]
    • 中间层:记录者作为客户端和原发器的中间层

    观察者

    • 目的:对象间的一对多关系,一个对象发生改变时,所有依赖它的对象都得到通知并被自动更新
    • 结构:一个主体(观察者列表)[获取状态,订阅,更新状态,通知],多个观察者/订阅者(主体)[更新]
    • 接口化:具体观察者实现抽象观察者类

    状态

    • 目的:对象行为随状态改变而改变
    • 结构:上下文类 ( 状态 ) [ 获取状态 , 设置状态 ],状态接口 [ 行为 ( 上下文 ) ] ,具体状态类 [ 行为 ( 上下文 ) ]
    • 对象化:把状态抽象为具体类,而不是用if-else

    策略

    • 目的:一个类的行为可在运行时更改
    • 结构:上下文类 ( 策略 )[ 执行策略 ],策略接口 [ 行为 ],具体策略类 [ 行为 ] 
    • 对象化:把策略抽象为具体类,而不是用if-else
    • 接口化:具体策略类重写策略接口的方法

    模板

    • 目的:子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤
    • 结构:模板类 [ 方法 ] ,具体类 [ 具体方法 ] 
    • 抽象化:将共用方法抽象到模板类中

    访问者

    • 目的:将数据结构(稳定)与数据操作(变化)分离,避免新增方法对已有对象的污染
    • 结构:访问者[ 访问 ( 具体的被访问者 ) ],被访问者接口 [ 接受访问 ( 抽象的访问者 ) ] ,被访问者 [ 接受访问 ( 抽象的访问者 ) ]
    • 接口化:将访问者、被访问者共同的动作分别抽象为接口

    说明

    • 静态来看,模式 = 结构
    • 动态来看,模式 = 构建 = 目的 + 手段
    • 结构是最终呈现,构建是依据实际场景,采用若干手段达到目的的过程
    • ( ) -- 属性
    • [ ] -- 方法
    • < > -- 容器
    • ( )在 [ ] 中
      • 方法名后 -- 参数
      • 方法名前 -- 返回值
  • 相关阅读:
    《J2EE的智能小区物业管理系统设计与实现》论文笔记(五)
    《基于.net的智能小区物业管理系统设计与实现》论文笔记(四)
    《基于SSH的小区物业管理系统设计与实现》论文笔记(三)
    《智能住宅小区物业管理系统设计与实现》论文笔记(二)
    《智能小区物业管理系统设计与实现》论文笔记(一)
    《轻量级响应式框架Vue.js应用分析》文献阅读(十)
    《Web2.0的研究与应用综述》文献阅读(九)
    《浅谈HTML5在中国的发展》文献阅读(八)
    《基于MVVM模式的WEB前端框架的研究》文献笔记(七)
    《Web新兴前端框架与模式研究》论文阅读(六)
  • 原文地址:https://www.cnblogs.com/cxc1357/p/13094415.html
Copyright © 2011-2022 走看看