内容:设计模式是解决特定问题的固定方法,它描述了如何解决常见的设计问题,使得代码可以更加灵活、可重用。设计模式通常具有普遍性、可重用性和灵活性等特点,它们提供了一种可重用的解决方案,帮助开发者避免重复发明轮子,并适应不同的应用场景
原则:提高软件的可维护性、可复用性和可扩展性的重要指导原则,这些原则包括:
- 单一职责原则:一个类应该只有一个引起它变化的原因。这意味着一个类应该只负责一项职责,遵循单一职责原则可以使代码更容易维护和理解。
- 开闭原则:软件实体如类、模块和函数应对扩展开放,对修改封闭。这意味着当软件需要变化时,应通过扩展软件实体的行为来实现变化,而不是修改已有的代码。
- 里氏替换原则:子类型必须能够替换掉它们的基类型。这意味着父类可被子类替换,但反之不一定成立。
- 依赖倒置原则:高层模块不应依赖于低层模块,两者都应依赖于抽象;抽象不应依赖于细节,细节应依赖于抽象。
- 接口隔离原则:使用多个专门的接口比使用单一的总接口更好。
- 合成/聚合复用原则:尽量使用对象的组合/聚合,而不是继承关系达到复用的目的。
- 迪米特法则:一个对象应对其他对象有尽可能少的了解,也称为最少知道原则。
分类:设计模式可以分为三大类:创建型模式、结构型模式和行为型模式。创建型模式关注对象的创建过程,如单例模式和抽象工厂模式。结构型模式关注类和对象的组合方式,如聚合和组合关系。行为型模式关注算法和对象间的通信方式,如责任链模式和命令模式。
-
创建型模式:
- 单例模式:确保一个类只有一个实例,并提供一个全局访问点。例如,在Java中,单例模式常用于管理系统的日志行为。
- 抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。例如,在系统中有多于一个的产品族时,可以使用抽象工厂模式来创建对象。
-
结构型模式:
- 聚合关系:表示类A包含类B,但类B可以独立存在。例如,手机和充电线之间的关系,充电线是手机的一部分,但充电线也可以独立存在。
- 组合关系:表示类A包含类B,且类B不能独立存在。例如,屏幕是手机的一部分,没有手机,屏幕就失去了存在的意义。
-
行为型模式:
- 责任链模式:多个对象处理一个请求,每个对象都有机会处理该请求,如果处理不了则传递给下一个对象。例如,在英语课上传递纸条的游戏中,每个同学都有机会处理请求(是否接受纸条上的提议)。
- 命令模式:将请求封装为一个对象,从而让你使用不同的请求把客户端的行为异化,增加新功能只需增加新的命令类。例如,通过命令模式实现消息的传递和处理。