### 23种设计模式详解 #### 创建型模式 **1. 工厂方法 (Factory Method)** - **定义**:定义一个用于创建对象的接口,让子类决定实例化的哪一个类。`Factory Method`模式使得一个类的实例化延迟到其子类。 - **适用场景**: - 当一个类不知道它所必须创建的对象的类的时候。 - 当一个类希望由它的子类来指定它所创建的对象的时候。 - 当类将创建的对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。 - **核心思想**:通过定义一个创建对象的接口,让子类决定实例化哪一个类。工厂方法模式把实例化的责任从客户端转移到了工厂类上,从而让客户端不必知道所创建的具体产品类。 **2. 抽象工厂 (Abstract Factory)** - **定义**:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 - **适用场景**: - 一个系统要独立于他产品的创建、组合和表示时。 - 一个系统要由多个产品系列中的一个来配置时。 - 当你要强调一系列相关的产品对象的设计以便进行联合使用时。 - 当你提供一个产品类库,而只想显示它们的接口而不是实现时。 - **核心思想**:通过一个接口来创建一组相关或相互依赖的对象,而不必指定具体类。 **3. 建造者 (Builder)** - **定义**:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 - **适用场景**: - 当创建复杂对象的算法应该独立于该对象的组成部分及其装配方式时。 - 当构造过程必须允许被构造的对象有不同的表示时。 - **核心思想**:通过将复杂的构建过程与表示分离,使得相同的构建过程可以创建不同的表示。 **4. 原型 (Prototype)** - **定义**:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 - **适用场景**: - 当要实例化的类是在运行时刻指定时,例如,通过动态装载,或者为了避免创建一个与产品类层次平行的工厂类层次时。 - 当一个类的实例只能有几个不同状态组合中的一种时,建立相应数量的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些。 - **核心思想**:通过复制已有的实例来创建新对象,从而避免重复的初始化过程。 **5. 单例 (Singleton)** - **定义**:保证一个类仅有一个实例,并提供一个访问它的全局访问点。 - **适用场景**: - 当类只有一个实例,并且客户可以从一个众所周知的访问点访问它时。 - 当这个唯一实例应该通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。 - **核心思想**:确保某个类只有一个实例,并提供一个访问该实例的全局访问点。 #### 结构型模式 **6. 适配器 (Adapter)** - **定义**:将一个类的接口转换成客户希望的另外一个接口。`Adapter`模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 - **适用场景**: - 你想用一个已经存在的类,而它的接口不符合你的需求。 - 你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。 - (仅适用于对象Adapter)你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口。 - **核心思想**:通过引入适配器类来解决接口不兼容的问题,使得不同接口的类能够协同工作。 **7. 桥接 (Bridge)** - **定义**:将抽象部分与它的实现部分分离,使它们都可以独立地变化。 - **适用场景**: - 你不希望在抽象和它的实现部分之间有一个固定的绑定关系。 - 类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充。 - 对一个抽象的实现部分的修改应对客户不产生影响,即客户的代码不必重新编译。 - 有许多类要生成。这样一种类层次结构说明你必须将一个对象分解成两个部分。 - 你想在多个对象间共享实现(可能使用引用计数),但同时要求客户并不知道这一点。 - **核心思想**:将抽象与其实现分离,使得两者可以独立变化。 **8. 组合模式 (Composite)** - **定义**:将对象组合成树形结构以表示“部分-整体”的层次结构。`Composite`使得用户对单个对象和组合对象的使用具有一致性。 - **适用场景**: - 你想表示对象的部分-整体层次结构。 - 你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。 - **核心思想**:将对象组织成树形结构来表示“部分-整体”的层次结构,使得用户能一致地处理单个对象和组合对象。 **9. 装饰 (Decorator)** - **定义**:动态地给一个对象添加一些额外的职责。就增加功能来说,`Decorator`模式相比生成子类更为灵活。 - **适用场景**: - 在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。 - 处理那些可以撤消的职责。 - 当不能采用生成子类的方法进行扩充时。一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长。另一种情况可能是因为类定义被隐藏,或类定义不能用于生成子类。 - **核心思想**:通过动态地给对象添加额外的责任,而不是通过继承机制来实现行为的扩展。 **10. 外观模式 (Facade)** - **定义**:为子系统中的一组接口提供一个一致的界面,`Facade`模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 - **适用场景**: - 当你要为一个复杂子系统提供一个简单接口时。子系统往往因为不断演化而变得越来越复杂。 - 大多数模式使用时都会产生更多更小的类。这使得子系统更具可重用性,也更容易对子系统进行定制,但这也给那些不需要了解子系统内部细节的用户带来了困扰。 - **核心思想**:通过为子系统中的一组接口提供一个一致的界面,简化了对外部系统的调用。 以上为创建型和结构型设计模式中的十个经典模式。通过这些模式,我们可以更好地设计出可扩展、可维护的系统架构。接下来的文章中,我们将继续探讨剩余的设计模式。























剩余11页未读,继续阅读


- 粉丝: 5
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- COMSOL中基于EWFD与EWBE模块的波导模式分析及传输效率计算
- 基于MPAPF技术的无人船复杂遭遇环境避碰与路径规划研究及MATLAB实现
- ANSOFT ANSYS Maxwell有限元仿真在无线电能传输及电机建模中的应用
- 基于动态窗口法DWA与模糊自适应权重调整的路径规划算法MATLAB实现
- 复合材料领域功能梯度板壳振动分析:改进精化板理论及其PythonMATLAB代码实现
- 铁路信息网络管理办法[最终版].pdf
- 汽车工程中基于模糊控制的主动悬架PID控制器优化模型及其MatlabSimulink实现
- 四轮转向汽车MPC路径跟踪Simulink-simscape仿真及MATLAB实现
- 中易智联汽车美容维修软件-积客系统-PPT课件.pptx
- 网络实名收费服务协议.docx
- 工地无线监控方案网络模板.doc
- 中职计算机应用专业人才培养方案.doc
- 湖南软件公司市场推广策划方案概要.doc
- 自动售货机C++.doc
- PLC自动包装机控制系统及仿真:基于西门子S7-1200编程与WinCC组态的技术应用
- 深度学习即回归“真学习”.pdf


