设计模式概述

设计模式:解决不断重复发生的问题的解决方案。

分类

创建模式:用于描述"怎样创建对象",提供了创建对象的机制,能够提升已有代码的灵活性和可复用性。

主要特点:将对象的创建与使用分离,

分为单例、原型、工厂、抽象工厂、建造者五种。

结构型模式:用于描述如何将类或对象按某种布局组成更大的结构,保持结构的灵活性和高效性;

分为代理、适配器、桥接、装饰、外观、享元、组合七种。

行为型模式:用于描述类或对象之间怎样相互协作共同完成单个对象无法单独完成的任务,以及怎样分配职责。(负责对象间的高效沟通和职责委派)

分为模板方法、策略、命令、职责链、状态、观察者、中介者、迭代器、访问者、备忘录、解释器十一种。

设计原则

单一职责原则

单一职责原则(Single Responsibility Principle):应该有且仅有一个原因引起类的变更。(一个类,最好只负责一件事)

开放封闭原则

开闭原则(Open Close Principle):对扩展开发,对于修改关闭。程序进行扩展的时候,不能去修改原有的代码。

可以使用接口或者抽象类

里氏替换原则

里氏替换原则(Liskov Substitution Principle):任何基类可以出现的地方,子类一定可以出现,即子类继承父类时,除添加新增方法完成新增功能,尽量不去重写父类方法。(让子类可以替换父类[向上转型])

依赖倒置原则

依赖倒置原则(Dependency Inversion Principle):

高层模块不可以依赖底层模块,均依赖其抽象;

抽象不应该依赖细节,

细节应该依赖抽象。

即要针对接口编程,而不是针对实现编程。

接口隔离原则

接口隔离原则(Interface Segregation Principle):

客户端不应该依赖它不需要的方法;(使用多个专门的接口,而不使用单一接口)

一个类对另一个类的依赖应该建立于最小的接口上

比如:类A需要用到fun1, 类B需要用到fun2;我们应该创建一个实现fun1的接口interface1,和一个实现fun2的接口interface2,然后在A中实现interface1, B中实现interface2

迪米特原则

迪米特原则(Least Knowledge Principle):又称为最少知识原则;

一个软件实体应当尽可能少地与其它实体发生相互作用。

如果两个软件实体不需要直接通信,那就不应当发生直接的相互调用,可以通过第三方转发该调用。类应该对自己需要调用的类知道得最少。降低类之间的耦合度,提供相对独立性。

合成复用原则

合成复用原则(Composite Reuse Principle)尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系实现。

分为合成复用和继承复用两种:

合成复用:(采用组合或聚合,将对象纳入新对象)

优点:维持了类的封装性;对象间的耦合度低;复用的灵活性高

继承复用:

优点:简单,易实现

缺点:破坏类的封装性;耦合度高;限制复用灵活性

关于设计模式的分类

创建模式:设计模式之创建者模式(5种)-CSDN博客

结构型模式:更新ing

行为型模式:更新ing

相关推荐
回忆2012初秋10 小时前
工厂方法模式完整实现:GPS转换
设计模式·工厂方法模式
胡志辉的博客13 小时前
多智能体协作,不是多开几个 Agent:从中介者模式看 OpenClaw 和 Hermes Agent
人工智能·设计模式·ai·agent·中介者模式·openclaw·herman
shark222222213 小时前
能懂!基于Springboot的用户增删查改(三层设计模式)
spring boot·后端·设计模式
014-code14 小时前
日志规范:怎么写才不算写废话
java·开发语言·设计模式·日志
楼田莉子15 小时前
同步/异步日志系统:日志落地模块\日志器模块\异步日志模块
linux·服务器·c++·学习·设计模式
kyriewen111 天前
代码写成一锅粥?这5种设计模式让你的项目“起死回生”
前端·javascript·设计模式·typescript·ecmascript·html5
kyriewen1 天前
代码写成一锅粥?这5种设计模式让你的项目“起死回生”
前端·javascript·设计模式
两年半的个人练习生^_^1 天前
每日一学:设计模式之原型模式
java·开发语言·设计模式·原型模式
断眉的派大星2 天前
工厂模式(Factory Pattern)完整详解
python·设计模式
AI大法师2 天前
复盘 TikTok 品牌升级:动态品牌系统应该怎么理解和落地
大数据·人工智能·设计模式