设计模式

· 浏览次数 : 0

小编点评

**7种设计模式** 1. 外观模式(Facade Pattern) 2. 结构型模式(1) 3. 观察者模式(Observer Pattern) 4. 代理模式(Proxy Pattern) 5. 桥接模式(Bridge Pattern) 6. 组合模式(Composite Pattern) 7. 享元模式(Flyweight Pattern) **21种具体设计模式** 1. 创建型模式(Singleton Pattern) 2. 适配器模式(Adapter Pattern) 3. 策略模式(Strategy Pattern) 4. 迭代器模式(Iterator Pattern) 5. 中介者模式(Mediator Pattern) 6.备忘录模式(Memento Pattern) 7. 状态模式(State Pattern) 8. 策略模式(Strategy Pattern) 9. 模板模式(Template Pattern) 10. 访问者模式(Visitor Pattern) 11. 内功模式(Inner Class) 12. 中间模式(Bridge) 13. 委托模式(Delegation Pattern) 14. 多线程模式(Multithreading Pattern) 15. 异常处理模式(Exception Handling Pattern) 16. 信号处理模式(Signal Handling Pattern) 17. 多线程池模式(Thread Pool Pattern) 18. 事件驱动编程模式(Event Driven Programming Pattern) 19. 消息队列模式(Message Queue Pattern) 20. 并行处理模式(Parallel Processing Pattern) 21. 协程模式(Concurrent Pattern)

正文

设计模式的七大原则

  • 1、开闭原则(Open Close Principle) 开闭原则的意思是:对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。

  • 2、里氏替换原则(Liskov Substitution Principle)(?子类可以替换基类??) 里氏代换原则中说:任何基类可以出现的地方,子类一定可以出现。LSP 是继承复用的基石,只有当派生类可以替换掉基类,且软件单位的功能不受到影响时,基类才能真正被复用,而派生类也能够在基类的基础上增加新的行为。里氏代换原则是对开闭原则的补充。实现开闭原则的关键步骤就是抽象化,而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。

  • 3、依赖倒转原则(Dependence Inversion Principle) 这个原则是开闭原则的基础,具体内容:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。即针对接口编程,不要针对实现编程。

  • 4、接口隔离原则(Interface Segregation Principle) 这个原则的意思是:使用多个隔离的接口,比使用单个接口要好。它还有另外一个意思是:降低类之间的耦合度。由此可见,其实设计模式就是从大型软件架构出发、便于升级和维护的软件设计思想,它强调降低依赖,降低耦合。建立单一接口,不要建立庞大臃肿的接口,尽量细化接口,接口中的方法尽量少。

  • 5、单一职责原则(Single Responsibility Principle):一个类负责一项职责。

  • 6、迪米特法则,又称最少知道原则(Demeter Principle) 最少知道原则是指:一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。高内聚 低耦合 – high cohesion low coupling

  • 7、组合/聚合复用原则(Composition/Aggregation Reuse Principle,CARP)):尽量使用组合和聚合少使用继承的关系来达到复用的原则。

24 种设计模式

一、创建型模式

  • 单例模式(Singleton Pattern): 确保一个类只有一个实例,可以直接访问,不需要实例化该类的对象。

  • 工厂模式(Factory Pattern):定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个,工厂方法让类把实例化推迟到子类。即一个工厂类,管理其余的所有子类,要想实例化子类,需通过工厂类的方法。

  • 抽象工厂模式(Abstract Factory Pattern):可以简单理解为如果有多个工厂模式,那么需要用抽象工厂来管理。

  • 建造者模式(Builder Pattern):使用多个简单的对象一步一步构建成一个复杂的对象(有点复杂)。

  • 原型模式(Prototype Pattern):当需要创建重复的对象时,为了保证性能和效率,它提供了一种创建对象的最佳方式。这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。

二、结构型模式

  • 1、装饰器模式(Decorator Pattern):动态地将责任附加到对象上, 若要扩展功能, 装饰者提供了比继承更有弹性的替代方案.

  • 2、适配器模式(Adapter Pattern):将一个类的接口, 转换成客户期望的另一个接口. 适配器让原本接口不兼容的类可以合作无间. 对象适配器使用组合, 类适配器使用多重继承.

  • 3、代理模式(Proxy Pattern):为另一个对象提供一个替身或占位符以控制对这个对象的访问.

  • 4、桥接模式(Bridge Pattern): 使用桥接模式通过将实现和抽象放在两个不同的类层次中而使它们可以独立改变.

  • 5、组合模式(Composite Pattern):允许你将对象组合成树形结构来表现”整体/部分”层次结构. 组合能让客户以一致的方式处理个别对象以及对象组合.

  • 6、外观模式(Facade Pattern):提供了一个统一的接口, 用来访问子系统中的一群接口. 外观定义了一个高层接口, 让子系统更容易使用.

  • 7、享元模式(Flyweight Pattern):如想让某个类的一个实例能用来提供许多”虚拟实例”, 就使用蝇量模式.

三、行为型模式

  • 1、观察者模式(Observer Pattern): 在对象之间定义一对多的依赖, 这样一来, 当一个对象改变状态, 依赖它的对象都会收到通知, 并自动更新.

  • 2、责任链模式(Chain of Responsibility Pattern): 通过责任链模式, 你可以为某个请求创建一个对象链. 每个对象依序检查此请求并对其进行处理或者将它传给链中的下一个对象.

  • 3、迭代器模式(Iterator Pattern):迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。

  • 5、中介者模式(Mediator Pattern):使用中介者模式来集中相关对象之间复杂的沟通和控制方式.

  • 6、备忘录模式(Memento Pattern):当你需要让对象返回之前的状态时(例如, 你的用户请求”撤销”), 你使用备忘录模式.

  • 8、状态模式(State Pattern):允许对象在内部状态改变时改变它的行为, 对象看起来好象改了它的类.

  • 9、策略模式(Strategy Pattern):定义了算法族, 分别封闭起来, 让它们之间可以互相替换, 此模式让算法的变化独立于使用算法的客户.

  • 10、模板模式(Template Pattern): 在一个方法中定义一个算法的骨架, 而将一些步骤延迟到子类中. 模板方法使得子类可以在不改变算法结构的情况下, 重新定义算法中的某些步骤.

  • 11、访问者模式(Visitor Pattern):当你想要为一个对象的组合增加新的能力, 且封装并不重要时, 就使用访问者模式.

个人感悟

我愿意将7种设计原则称为内功,21种具体设计模式称为招式。内功一成在写代码的时候,就有高内聚低耦合的潜意识,招式能帮助我们在经典场景上用成熟的方式去解决问题。

具体每种设计模式的demo 参见,别忘了给小星星吆~

https://github.com/ttzhanghuiyuan/design-pattern

与设计模式相似的内容:

设计模式

设计模式的七大原则 1、开闭原则(Open Close Principle) 开闭原则的意思是:对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中

设计模式之适配器模式(学习笔记)

定义 适配器模式是一种结构型设计模式,它允许将一个类的接口转换为客户端希望的另一个接口。适配器使得原本由于接口不兼容而不能一起工作的类可以协同工作。通过创建适配器类,可以将现有类的接口转换成目标接口,从而使这些类能够在一起工作。 为什么使用适配器模式 兼容性 适配器模式能够解决由于接口不兼容而无法直

设计模式之抽象工厂模式(学习笔记)

定义 抽象工厂模式是一种创建型设计模式,它提供一个接口,用于创建一系列相关或依赖的对象,而无需指定它们的具体类。抽象工厂模式将对象的创建过程抽象化,允许子类通过实现具体工厂类来定制对象的创建。 为什么使用抽象工厂模式 产品族的一致性 抽象工厂模式确保同一产品族中的对象之间的一致性。 部分遵循开闭原则

设计模式-C#实现简单工厂模式

前言 上一篇文章写了如何使用RabbitMQ做个简单的发送邮件项目,然后评论也是比较多,也是准备去学习一下如何确保RabbitMQ的消息可靠性,但是由于时间原因,先来说说设计模式中的简单工厂模式吧! 在了解简单工厂模式之前,我们要知道C#是一款面向对象的高级程序语言。它有3大特性,封装、继承、多态。

设计模式之工厂模式(学习笔记)

定义 工厂方法模式是一种创建型设计模式,它定义了一个用于创建对象的接口,但由子类来决定实例化哪一个类。工厂方法使得类的实例化延迟到子类,这样可以让客户端在不需要知道具体类的情况下创建对象。工厂方法模式通过使用继承和多态性,允许子类来控制对象的创建方式,能够更好地应对对象创建的复杂性和变化性。 为什么

设计模式之简单工厂模式(学习笔记)

定义 简单工厂模式(Simple Factory Pattern)是一种创建型设计模式,它定义一个用于创建对象的接口,但由一个单独的类来实现实际创建的工作。简单工厂模式通过在一个类中集中管理对象的创建过程,可以减少客户端与具体类之间的耦合,使得代码结构更加清晰和易于维护。通过专门定义一个类来负责创建

设计模式:代理模式详解

需求场景 按着惯例,还是以一个应用场景作为代理模式的切入点。现在有一个订单系统,要求是:一旦订单被创建,只有订单的创建人才可以修改订单中的数据,其他人则不能修改。 基本实现思路 按着最直白的思路,就是查询数据库中订单的创建人和当前Session中的登录账号ID是否一致。 class Order {

设计模式之装饰模式(学习笔记)

定义 装饰模式(Decorator Pattern),又称为包装模式,是一种结构型设计模式。它允许在不改变现有对象结构的情况下,动态地添加新的功能。通过将每个功能封装在单独的装饰器类中,并且这些装饰器类通过引用原始对象来实现功能的组合,从而提供了灵活性和可扩展性的优势。装饰模式避免了通过继承方式增加

设计模式学习(二)工厂模式——抽象工厂模式+注册表

目录前言使用简单工厂改进使用注册表改进参考文章 前言 在上一篇文章中我们提到了抽象工厂模式初版代码的一些缺点:①客户端违反开闭原则②提供方违反开闭原则。本文将针对这两点进行讨论 使用简单工厂改进 对于缺点①,我们可以使用简单工厂的思路来改进抽象工厂的初版代码。对于上一篇文章中的例子,我们去除Came

设计模式学习(二)工厂模式——抽象工厂模式

目录背景抽象工厂模式优点与缺点参考文章 背景 现在我需要开发一个相机操作模块,它可能在Windows下运行,也可能在Linux下运行。由于在厂家提供的SDK中,Windows下的SDK和Linux下的SDK是有区别的,因此对于一个品牌的相机,我们要创建两个类去封装这两个不同平台下的API。 我们先使