侧边栏壁纸
博主头像
树下魅狐博主等级

是技术也是艺术

  • 累计撰写 16 篇文章
  • 累计创建 13 个标签
  • 累计收到 10 条评论
隐藏侧边栏

关于设计模式(About Design Pattern)

树下魅狐
2022-03-02 / 0 评论 / 6 点赞 / 4,216 阅读 / 1,618 字
温馨提示:
本文最后更新于 2022-03-02,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

关于设计模式(About Design Pattern)

一、 什么是设计模式

设计模式不是我们熟知的某种框架,也不是某种具体的实现,而是作为编程问题的解决方案(指导思想)而存在。它描述了众多有经验的开发人员以往多次遇到问题的通用解决办法。

二、设计模式分类

从类型上看,设计模式可以分为三大类:生成模式(Creational Patterns)、结构模式(Structural Patterns)和行为模式(Behavioral Pattern)。

2.1 生成模式(Creational Patterns)

生成类包含以下几种设计模式:

  • 抽象工厂模式-Abstract Factory Pattern: 产品有多种类别,N个工厂类把工厂抽象出来(不一定是一个工厂只负责生产一类产品,看实际需求)
  • 建造者模式-Builder Pattern: 产品与产品建造流程进行解耦,用简单方式生产出复杂的产品,不用深入了解产品构造,只是简单的配置就好。
  • 工厂方法模式-Factory Method Pattern: 将同一类产品分为不同的部分,每个工厂负责生产其中的一部分。
  • 原型模式-Prototype Pattern: 可以直接使用Java自带的clone进行浅拷贝,也可以用Java反序列化,进行深拷贝。
  • 单例模式-Singleton Pattern: 在整个系统中,有且只有一个单体的对象实例。

2.2结构模式(Structural Patterns)

结构类包含以下几种设计模式:

  • 适配器模式-Adapter Pattern:将不能直接使用或者使用复杂的东西,变成能直接使用或使用方便的东西,例如:电源适配器,将220V电转换为200V电。
  • 桥接模式-Bridge Pattern:抽象(定义)和实现分离。
  • 组合模式-Composite Pattern:用于把一组相似的对象当作一个单一的对象,组合模式依据树形结构来组合对象,用来表示部分与整体层次。
  • 装饰者模式-Decorator Pattern:动态的将新功能附加到对象上。
  • 外观模式-Facade Pattern:为子系统中的一组接口提供统一的界面,这个接口使得子系统更容易使用。
  • 享元模式-Flyweight Pattern:对象复用(常量池,连接池),重点在于复用而不是内部状态。
  • 代理模式-Proxy Pattern:代理对象可以在客户端和目标对象之间起到中介作用,对目标对象起到一定的保护。

2.3 行为模式(Behavioral Patterns)

行为类包含以下几种设计模式:

  • 责任链模式-Chain of Responsibility Pattern:如果一个对象不能处理当前请求,则将请求转发(传递)给下一个接收者。
  • 命令模式-Command Pattern:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分离。
  • 解释器模式-Interpreter Pattern:实现一个表达式接口,用于解释一个特定的上下文。
  • 迭代器模式-Iterator Pattern:提供一种方法,顺序访问一个聚合对象中各个元素,且无需暴露该对象的内部结构。
  • 中介模式-Mediator Pattern:降低多个对象和类之间的通信复杂度。
  • 备忘录模式-Memento Pattern:在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
  • 观察者模式-Observer Pattern:当一个对象的状态发生改变时,会自动通知依赖它的对象做出反应。
  • 状态模式-State Pattern:允许对象在内部状态发生改变时改变它的行为。
  • 策略模式-Strategy Pattern:利用面向对象的多态特点,引用的是抽象类,当实际调用的时候,是被调用者是该对象的实体子类。
  • 模版方法模式-Template Methods Pattern:定义一个操作中的算法骨架,将一些步骤延迟到子类中。
  • 访问者模式-Visitor Pattern:为数据结构中的每个元素提供多种访问方式。

三、设计模式全图

23种设计模式分类归纳如下:

资源 1.png

0

评论区