首页 > 其他分享 >章七 设计模式

章七 设计模式

时间:2023-03-28 11:00:44浏览次数:32  
标签:章七 定义 对象 创建 接口 一个 组件 设计模式


章七 设计模式

一、设计模式的分类
1、共包含23个设计模式
1)Abstract Factory
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
2)Adapter
将一个类的接口转换成客户希望的另一个接口。
3)Bridge
将抽象部分与实现部分分离,使它们可以独立变化。
4)Builder
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
5)Chain of Responsibility
为解除请求的发送者和接收者之间的耦合,而使多个对象都有机会处理这个请求。
6)Command
将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化。
7)Composite
将对象组合成树形结构以表示“整体-部分”的层次结构,使客户对单个对象和复合对象的使用具有一致性。
8)Decorator
动态地给一个对象添加一些额外的职责。
9)Facade
为子系统中的一组接口提供一个一致的界面。
10)Factory Method
定义一个用于创建对象的接口,让子类决定将哪一个类实例化。
11)Flyweight
运用共享技术有效的支持大量细粒度的对象。
12)Interpreter
给定一个语言,定义其文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。
13)Iterator
提供一种方法顺序访问一个聚合对象中各个元素,而不需暴露该对象的内部表示。
14)Mediator
用一个中介对象来封装一系列的对象交互。
15)Memento
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
16)Observer
定义对象间的一对多的依赖关系,以便当一个对象状态发生改变时,所有依赖于它的对象都得到通知并自动刷新。
17)Prototype
用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。
18)Proxy
为其它对象提供一个代理以控制这个对象的访问。
19)Singleton
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
20)State
允许一个对象在其内部状态改变时改变它的行为。
21)Strategy
定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。
22)Template Method
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。
23)Visitor
表示一个作用于某对象结构中的各元素的操作。可以在不改变各元素的类的前提下定义作用于这些元素的新操作。

2、各模式详述
1)Abstract Factory-对象创建模式
意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
为保证可移植性,一个应用不能为一个特定的视感外观硬编码它的窗口组件。在整个应用中实例化特定视感风格的窗口组件类将使得以后很难改变视感。
解决方法:
(1)定义一个抽象的WidgetFactory类;
(2)声明一个创建每一类基本窗口组件的接口;
(3)每一类窗口组件都有一个抽象类,而具体子类则实现了窗口组件的特定视感风格;
(4)对每一个抽象窗口组件类,WidgetFactory接口都有一个返回新窗口组件实例。
适用性:
(1)一个系统要独立于它的产品的创建、组合和表示时;
(2)一个系统要由多个产品系列中的一个来配置时;
(3)要强调一系列相关产品的对象设计以便进行联合使用时;
(4)提供一个产品类库,而只想显示它们的接口而不是实现时。
参与者:
(1)AbstractFactory(WidgetFactory) 声明一个创建抽象产品对象的操作接口
(2)ConcreteFactory(MotifWidgetFactory,PMWidgetFactory) 实现创建具体产品对象的操作;
(3)AbstractProduct(Windows,ScrollBar) 为一类产品对象声明一个接口。
(4)ConcreateProduct(MotifWindow,MotifScrollBar) 定义一个被相应的具体工厂创建的产品对象,实现接口;
(5)Client 仅使用AbstractFactory和AbstractProduct类声明的接口。
优缺点:
(1)分离了具体的类;
(2)使得易于交换产品系列;
(3)有利于产品的一致性;
(4)难以支持新种类的产品。
实现:
(1)将工厂作为Singleton;
(2)创建产品;
(3)定义可扩展的工厂。
代码示例:

class Mazefactory{
public:
 MazeFactory();
 virtual Maze* MakeMaze() const
  {return new Maze;}
 virtual Wall* MakeWall() const
  {return new Wall;}
 virtual Room* MakeRoom(int n) const
  {return new Room(n);}
 virtual Door* MakeDoor(Room* r1, Room* r2) const
  {return new Door(r1,r2);}
};

标签:章七,定义,对象,创建,接口,一个,组件,设计模式
From: https://blog.51cto.com/prettycms/6154239

相关文章

  • Android 架构设计(一):设计模式分析
    现有Android主流设计模式有哪些?1:无架构     -很多人把无架构定为MVC,这边深海要纠正一下,无架构!=MVC 2:MVC      Model -数据模型/数据来源。View......
  • Go语言:一文看懂什么是DI依赖注入(dependency injection)设计模式
    前言:本文主要介绍的是Goalng中关于DI的部分,前一部分会先通过典型的面向对象语言Java引入DI这个概念仅供初学者理解使用,文章如有纰漏敬请指出本文涉及到的知识面较为......
  • 前端设计模式——访问者模式
    访问者模式(VisitorPattern)是一种行为型设计模式,用于将操作与其所操作的对象分离开来。该模式的核心思想是将操作封装在一个访问者对象中,而不是分散在各个对象中。通过将操......
  • 前端设计模式——路由模式
    路由模式(RouterPattern):将页面的不同状态映射到不同的URL路径上,使得用户可以直接通过URL来访问页面的不同状态。路由模式通常用于实现单页面应用(SPA)的页面导航和状态管理......
  • Java 并发中的设计模式
    其实在Java并发编程这个领域中,隐藏了许多的“设计模式”,并发编程的设计模式和我们常谈的“单例模式”、“工厂模式”这类“设计模式”,其实可以理解为都是对代码精良设计......
  • 设计模式-用代理模式(Proxy Pattern)来拯救你的代码:打造可靠的程序设计
    前言设计模式是一种高级编程技巧,也是一种通用的解决方案。它能在不同的应用场景中使用,它可以提高代码的可读性、可复用性和可维护性。设计模式的学习能提高我们的编程能力......
  • 设计模式之单例模式C++实现
    初步用C++实现单例模式,暂未考虑线程安全问题#include<stdio.h>#include<iostream>usingstd::cout;usingstd::cin;usingstd::endl;//单例模式的设计需求:一个......
  • 前端设计模式——委托模式
    委托模式(Delegationpattern):将一个对象的某个方法委托给另一个对象来执行,它可以帮助我们将对象之间的关系更加灵活地组织起来,从而提高代码的可维护性和复用性。在委托模式......
  • java学习日记20230325-模版设计模式
    模版设计模式利用多态的动态绑定,将通用的方法设计为模版抽象类,通过子类继承重写抽象方法实现模版调用。 父类抽象类abstractpublicclassTemplate{......
  • 设计模式相关 小题
    10.当对一个对象的改变需要同时改变其它对象,但它不知道其它对象是谁,并且也不知道具体有多少对象有待改变时,我们应该使用()A、责任链(ChainofResponsibility)B、观察者(......