文章目录
- 基本概念
- 设计模式的七大原则
- 设计模式有哪些
- 高频使用&经典的设计模式
- 创建型-工厂方法模式
- 创建型-建造者模式
- 结构型-代理模式
- 结构型-外观模式
- 行为型-策略模式
- 行为型-模板方法
- 补充
- UML类图关系
- 参考
基本概念
使得代码编写真正工程化,它是软件工程的基石。
设计模式的七大原则
- 开闭原则:对扩展开放、对修改关闭。
- 单一指责原则:一个类只做一件事。
- 依赖倒置原则:针对接口编程,依赖于抽象而不依赖于具体
- 迪米特原则:高内聚,低耦合。
- 接口隔离原则:应该使用多个接口,而不是用单一的总接口,降低接口之间的耦合度与依赖。
- 合成复用原则:尽量使用组合/聚合的方式,而不是使用继承。
- 里氏替换原则:子类可以扩展父类的功能,但不能改变原有的功能。
设计模式有哪些
设计模式分为三大类:
- 创建型模式:共5种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式
- 结构型模式:共7种:适配器模式、装饰器模式、代理模式、桥接模式、外观模式、组合模式、享元模式
- 行为型模式:共11种:策略模式、模板方法模式、观察者模式、责任链模式、访问者模式、中介者模式、迭代器模式、命令模式、状态模式、备忘录模式、解释器模式
高频使用&经典的设计模式
创建型-工厂方法模式
符合开闭原则:扩展时,工厂类无需修改,仅需添加具体类即可。
创建型-建造者模式
将产品的创建与产品本身分离开来,使得同样的构建过程可以创建不同的对象;并且每个具体建造者都相互独立,因此可以很方便地替换具体建造者或增加新的具体建造者,用户使用不同的具体建造者即可得到不同的产品对象。
结构型-代理模式
- 通过代理对象来访问真实对象。
- 用于协调与连接调用者(即客户端)和被调用者(即目标对象。
- 在一定程度上降低了系统的耦合度,同时也保护了目标对象。
结构型-外观模式
外观模式适用于为复杂子系统提供一个简单接口,提高系统的易用性场景以及引入外观模式将子系统与客户端进行解耦,提高子系统的独立性和可移植性。
行为型-策略模式
- 优点在于可以动态改变对象的行为。
- 缺点是会产生很多策略类,并且策略模式的决定权在用户,系统只是提供不同算法的实现,所以客户端必须知道所有的策略类,并自行决定使用哪一个策略类。
策略模式适用场景:
- 场景A:应用程序需要实现特定的功能服务,而该程序有多种实现方式使用,所以需要动态地在几种算法中选择一种
- 场景B:一个类定义了多种行为算法,并且这些行为在类的操作中以多个条件语句的形式出现,就可以将相关的条件分支移入它们各自的Strategy类中以代替这些条件语句。
行为型-模板方法
模板方法是基于继承实现的,在抽象父类中声明一个模板方法,并在模板方法中定义算法的执行步骤(即算法骨架)。在模板方法模式中,可以将子类共性的部分放在父类中实现,而特性的部分延迟到子类中实现,只需将特性部分在父类中声明成抽象方法即可,使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤,不同的子类可以以不同的方式来实现这些逻辑。
- 父类:实现共性部分,定义特性部分为抽象方法(可称为执行步骤)。
- 子类:实现特性部分。
- 优点在于符合“开闭原则”,实现代码复用,将不变的行为转移到父类,去除子类中的重复代码
- 缺点在于不同的实现都需要定义一个子类,导致类的个数的增加使得系统更加庞大,设计更加抽象。
补充
UML类图关系
参考
- https://blog.csdn.net/a745233700/article/details/83625236
- https://blog.csdn.net/sumengnan/article/details/113689824