• 设计模式总结


    目录

    参考

    1. 图说设计模式

    面向对象设计原则

    1. 对接口编程而不是对实现编程
    2. 优先使用对象组合而不是继承

    6原则

    1. 开闭原则:扩展开,修改闭
    2. 里氏代换原则:子替换父
    3. 依赖倒转原则:面向接口编程,依赖于抽象而不依赖于具体
    4. 接口隔离原则:每个接口中不存在子类用不到却必须实现的方法
    5. 迪米特法则:最少知道原则
    6. 合成复用原则:优先合成,再继承

    创建型模式

    1、简单工厂

    1. 简单对象的创建
    2. 子类实例化
    3. 通过if...else...生成哪个子类
    4. eg: 形状类、颜色类

    2、工厂方法

    1. 每个子类在单独的方法中创建

    3、抽象工厂

    1. 工厂的工厂;创建一系列相关或相互依赖对象的接口,无需指定具体的类
    2. eg: 形状、颜色类的结合

    4、单例

    1. 懒汉(线程不安全)
    2. 懒汉(线程安全)
      1. 优点:不浪费内存
      2. 缺点:加锁,效率低
    3. 饿汉(类加载时初始化)
      1. 优点:没有加锁,效率高
      2. 缺点:浪费内存
    4. 双校验懒汉(双锁机制)
    5. 静态内部

    5、建造者

    1. 复杂对象的创建
    2. eg:去肯德基,汉堡、可乐、薯条、炸鸡翅等是不变的,而其组合是经常变化的,生成出所谓的"套餐"
    3. eg:地图包括天空、地面、背景等组成部分,人物角色包括人体、服装、装备等组成部分

    6、原型

    1. 创建重复的对象
    2. 直接创建代价比较大时,克隆已经创建的对象
    3. eg:一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用

    结构型模式

    1、适配器

    1. 接口转换
    2. 继承或依赖已有的对象,实现想要的目标接口。
    3. eg: 读卡器

    2、桥接

    1. 抽象和实现分离
    2. 解决继承造成类的数量剧增
    3. 类有多个独立变化维度,类似多继承
    4. eg: 画不同颜色的圆、矩形等

    3、过滤器

    1. 将过滤的逻辑运算解耦,结合多个标准获得一个标准

    4、装饰器

    1. 向一个现有对象添加新功能,且不改变对象的结构
    2. 是继承的替代。解决子类继承后扩展功能增多后变得臃肿
    3. 动态增加些额外功能
    4. 一般将待扩展的类作为装饰器类中的成员

    5、组合

    1. 类似于树结构,在一个对象中包含其他对象
    2. 缺点:在使用组合模式时,其叶子和树枝的声明都是实现类,而不是接口,违反了依赖倒置原则
    3. eg:文件目录

    6、外观

    1. 添加简单的接口来隐藏系统的复杂性,降低调用者的理解成本
    2. 缺点:不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。
    3. eg: 房产中介

    7、享元

    1. 减少创建对象的数量,共享已有的对象
    2. eg:缓冲池

    8、代理

    1. 一个类代表另一个类的功能
    2. 想在访问一个类时做一些控制
    3. 和适配器模式的区别:适配器模式主要改变所考虑对象的接口,而代理模式不能改变所代理类的接口。
    4. 和装饰器模式的区别:装饰器模式为了增强功能,而代理模式是为了加以控制。

    行为

    1、命令

    1. 解耦请求发送者和接受者
    2. 将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化
    3. eg:电视遥控器
    4. 支持命令的撤销(Undo)操作和恢复(Redo)操作

    2、中介

    1. 封装对象的交互,解耦对象间的引用
    2. 将网状结构分离为星状结构
    3. eg:聊天室
    4. 是迪米特法则的一个典型应用

    3、观察者

    1. 一对多依赖关系
    2. 观察目标状态改变,相关依赖对象得到通知
    3. eg:玩家升级,任务、成就等解锁

    4、状态

    1. 允许对象在内部状态发生改变时改变它的行为
    2. 条件、分支语句的代替者
    3. 主要优点在于封装了转换规则,并枚举可能的状态
    4. eg:状态机

    5、策略

    1. 类的行为或算法在运行时更改
    2. 封装算法,可以相互替换
    3. 符合开闭原则
    4. 减少if...else...
    5. eg: 武器发射不同的子弹
  • 相关阅读:
    【Java】_2_Java程序入门第五课
    【算法和数据结构】_3_线性结构_栈
    Windows程序设计_17_鼠标_1
    网络基础知识1:集线器,网桥,交换机
    [hyddd安全性测试笔记2]浅淡静态代码分析工具
    [Ruby小记]初试~
    Arp攻击实战
    [hyddd安全性测试笔记1]URL Encode and URL Decode
    网络嗅探技术浅析
    Session小记
  • 原文地址:https://www.cnblogs.com/YYRise/p/9624423.html
Copyright © 2020-2023  润新知