设计模式介绍

Posted by KalosAner on November 28, 2024

一、简介

面向对象的设计模型的目的是为了增加可复用性。

客户需求、技术平台、开发团队和市场环境的变化导致软件设计变得很复杂。为了解决这种复杂性有以下两种方法:分解抽象

面向对象设计有八大原则(比具体的设计模式更重要):

1、依赖倒置原则(DIP)

高层模块(稳定)不应该依赖于低层模块(变化),二者都应该依赖于抽象(稳定) 。

抽象(稳定)不应该依赖于实现细节(变化) ,实现细节应该依赖于抽象(稳定)。

2、开放封闭原则(OCP)

对扩展开放,对更改封闭。

类模块应该是可扩展的,但是不可修改。

3、单一职责原则(SRP)

一个类应该仅有一个引起它变化的原因。

变化的方向隐含着类的责任。

4、Liskov 替换原则(LSP)

子类必须能够替换它们的基类(IS-A)。

继承表达类型抽象。

5、接口隔离原则(ISP)

不应该强迫客户程序依赖它们不用的方法。

接口应该小而完备。

6、优先使用对象组合,而不是类继承

类继承通常为“白箱复用”,对象组合通常为“黑箱复用”。

继承在某种程度上破坏了封装性,子类父类耦合度高。

而对象组合则只要求被组合的对象具有良好定义的接口,耦合度低。

7、封装变化点

使用封装来创建对象之间的分界层,让设计者可以在分界层的一侧进行修改,而不会对另一侧产生不良的影响,从而实现层次间的松耦合。

8、针对接口编程,而不是针对实现编程

不将变量类型声明为某个特定的具体类,而是声明为某个接口。

客户程序无需获知对象的具体类型,只需要知道对象所具有的接口。

减少系统中各部分的依赖关系,从而实现“高内聚、松耦合”的类型设计方案。

二、23 种设计模式

23 种设计模式可以分为几类:

从目的上看:

创建型:解决需求变化对对象创建的冲击

结构型:解决需求变化对对象结构的冲击

行为型:解决需求变化对多个类交互责任划分的冲击

从范围上看:

类模式处理类与子类的静态关系。

对象模式处理对象间的动态关系。

除了 23 中设计模式之外还有一种 J2EE 设计模式,它是一组为企业级应用程序开发设计的模式集合,旨在解决常见的问题并促进代码的复用性、灵活性和可维护性。它们主要应用于分布式系统和企业应用的开发中,帮助开发者处理复杂的架构问题,比如性能优化、资源管理、事务处理等。

序号 模式 & 描述 包括
1 创建型模式
这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。
工厂模式(Factory Pattern)
抽象工厂模式(Abstract Factory Pattern)
单例模式(Singleton Pattern)
建造者模式(Builder Pattern)
原型模式(Prototype Pattern)
2 结构型模式
这些模式关注对象之间的组合和关系,旨在解决如何构建灵活且可复用的类和对象结构。
适配器模式(Adapter Pattern)
桥接模式(Bridge Pattern)
过滤器模式(Filter、Criteria Pattern)
组合模式(Composite Pattern)
装饰器模式(Decorator Pattern)
外观模式(Facade Pattern)
享元模式(Flyweight Pattern)
代理模式(Proxy Pattern)
3 行为型模式
这些模式关注对象之间的通信和交互,旨在解决对象之间的责任分配和算法的封装。
责任链模式(Chain of Responsibility Pattern)
命令模式(Command Pattern)
解释器模式(Interpreter Pattern)
迭代器模式(Iterator Pattern)
中介者模式(Mediator Pattern)
备忘录模式(Memento Pattern)
观察者模式(Observer Pattern)
状态模式(State Pattern)
空对象模式(Null Object Pattern)
策略模式(Strategy Pattern)
模板模式(Template Pattern)
访问者模式(Visitor Pattern)
4 J2EE 模式
这些设计模式特别关注表示层。这些模式是由 Sun Java Center 鉴定的。
MVC 模式(MVC Pattern)
业务代表模式(Business Delegate Pattern)
组合实体模式(Composite Entity Pattern)
数据访问对象模式(Data Access Object Pattern)
前端控制器模式(Front Controller Pattern)
拦截过滤器模式(Intercepting Filter Pattern)
服务定位器模式(Service Locator Pattern)
传输对象模式(Transfer Object Pattern)