设计模式是软件设计中常见问题的典型解决方,尝试着学习一下它到底是怎样的
6大设计原则
SOLID 原则
-
单一职责原则 (Single responsibility principle, SRP),每个实体功能都应该专注于一件事上。同时做两件以上的事情,不但阅读性降低,出错时也更难找到问题点。另外多个职责耦合在一起,会影响复用性
-
开放封闭原则 (Open-Close principle, OCP),通过增加新代码来扩展系统的功能,而不是通过修改原本已经存在的代码来扩展系统的功能。当未来需求有异动时,如果为了新需求而改动原有代码,可能会造成其他调用原本代码时发生非预期错误
-
里氏替换原则 (Liskov substitution principle, LSP),任何基类可以出现的地方,子类一定可以出现(替换)。子类可以扩展父类的功能,但不能改变父类原有的功能。只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。
实现 OCP 原则的关键步骤就是抽象化,而基类与子类的继承关系是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。
-
接口隔离原则 (Interface segregation principle, ISP),使用多个隔离的小接口,比使用单个整合在一起的大接口要好。为了方便维护和升级已有的代码,需要尽量降低类之间的耦合度,降低依赖,降低耦合
-
依赖反转原则 (Dependency inversion principle, DIP),要依赖于抽象,而不依赖于具体。即高低阶层代码都依赖一个抽象类,在抽象类中定义所依赖的方法,并由子类去实现
-
最少知识原则(Least knowledge principle, LKP),实体之间的联系(通信/交流)应当尽量少。即一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。这样当一个模块修改时,就会尽量少的影响其他的模块,扩展会相对容易(主要还是解耦思想)。
DRY 原则
Do not repeat yourself
设计模式分类
设计模式根据其目的来分类:
- 创建型模式提供创建对象的机制, 增加已有代码的灵活性和可复用性,注重如何初始化一个或一群实体
- 结构型模式介绍如何将对象和类组装成较大的结构, 并同时保持结构的灵活和高效,注重实体之间互相组合取代继承
- 行为模式负责对象间的高效沟通和职责委派,注重分配每个实体的功能,建立联系沟通。
创建型模式
- 单例模式(Singleton Design Pattern)
- 简单工厂模式(Simple Factory Pattern)
- 工厂方法模式(Factory Method Pattern)
- 抽象工厂模式(Abstract Factory)
- 建造者模式(Builder Design Pattern)
- 原型模式(Prototype Design Pattern)
结构性模式
- 代理模式(Proxy Design Pattern)
- 桥接模式(Bridge Design Pattern)
- 装饰器模式(Decorator Design Pattern)
- 适配器模式(Adapter Design Pattern)
- 门面模式(Facade Design Pattern)
- 组合模式(Composite Design Pattern)
- 享元模式(Flyweight Design Pattern)
行为模式
- 观察者模式(Observer Design Pattern)
- 模板方法模式(Template Design Pattern)
- 策略模式(Strategy Method Design Pattern)
- 职责链模式(Chain Of Responsibility Design Pattern)
- 状态模式(State Design Pattern)
- 迭代器模式(Iterator Design Pattern)
- 访问者模式(Visitor Design Pattern)
- 备忘录模式(Memento Design Pattern)
- 命令模式(Command Design Pattern)
- 解释器模式(Interpreter Design Pattern)
- 中介者模式(Mediator Design Pattern)
其中个人觉得以下模式常见且实用,可以好好把握
- 模板方法模式
- 组合模式
- 桥接模式
- 原型模式
- 单例模式
- 策略模式
- 职责链模式
- 状态模式
- 迭代器模式