24设计模式
2023-03-21 23:28:20 12 举报
AI智能生成
24种设计模式,详细思维导图,软考必备,本人已过
作者其他创作
大纲/内容
创建型 实现,继承
Abstract Factory (抽象工厂)
意图
提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类
结构
AbstractFactory
声明一个创建抽象产品对象的操作接口
Concrete(具体的)Factory
实现创建具体产品对象的操作
AbstractProduct
为一类产品对象声明一个接口
ConcreteProduct
定义一个将被相应的具体工厂创建的产品对象,实现AbstractProduct
Cilent
仅使用由AbstractFactory和AbstractProduct类声明的接口
适用性
一个系统独立于产品创建
一个系统要由多个产品系列中的一个来配置
说明结构有两种不同的产品组合使用的情况
产品类库接口
重点是提供接口
Builder(生成器)
意图
将一个复杂对象的构建与他的表示分离,是的同样的构建过程可以创建不同的表示
结构
Builder
创建一个Product对象的各个部件指定抽象接口
ConcrateBuilder
实现builder接口
Director
指定一个使用Builder接口的对象
Product
表示被构造的复杂对象
适用性
当构造过程必须允许被构造对象有不同表示时
复杂对象算法应该独立于该对象的组成部分时
Factory Method
意图
定义一个用于创建对象的接口,让子类决定实例化哪一个类
结构
Product
定义工厂方法创建的接口
ConcreteProduct
实现Product接口
Creator
声明工厂方法,该方法返回一个Product对象
ConcreteCreator
返回ConCreteProduct实例
适用性
一个类不知道对象的类
一个类希望由他子类指定
类将创建对象的职责交个子类
Prototype(原型)
意图
用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象
结构
Prototype
声明一个复制自身的接口
ConcretePrototype
实现Prototype接口
Client
让一个原型复制自身
适用性
一个系统独立于他的产品创建
动态装载
避免创建一个与产品类层次平行的工程类层次时
Singleton (单例)
意图
保证一个类仅有一个实例
结构
Singleton
Instance操作
Instance
创建唯一实例
适用性
只有一个实例
唯一实例可通过子类化扩展
总
Abstract Factory和Builder和Prototype关键特征“工厂对象”,其中工厂对象和原型为同一个对象
结构型 接口,组合
Adapter(适配器)
意图
将一个类的接口转换为客户需要的接口
结构
Target
定义C李恩同事用的与特定领域相关的接口
Client
Target接口的对象协同
Adaptee
定义一个已经存在的接口,这个接口需要适配
Adapter
对Adaptee与Target接口适配
适用性
已经存在的类但接口不符合要求
可以与其他不相关类协同工作
不可能对每一个类都进行子类化以匹配他们的接口
Bridge(桥接)
意图
将抽象部分与其实现部分分离
结构
Abstraction
定义抽象类接口
RefinedAbstraction
扩充由Abstraction定义的接口
Implementor
定义实现类的接口
ConcreteImplementor
实现Implementor接口
适用性
不希望有绑定关系
类的抽象以及他的实现都应该可以通过生成子类的方法加以扩充
客户代码不必从新翻译
完全隐藏抽象的实现部分
想在多个对象间共享实现,但同时要求客户并不知道这一点
Composite(组合)
意图
部分-整体
结构
Component
为组合中的对象声明接口
Leaf
在组合中定义图元对象的行为
Composite
定义有子组件的那些组件的行为
Client
通过Component接口操纵组合组件对象
适用性
部分-整体
希望用户忽略组合对象与单个对象的不同
Decorator(装饰)
意图
动态的给一个对象添加一些额外的职责
结构
Component
定义一个对象接口,可以给这些对象动态的添加职责
ConcreteComponent
实现
Decorator
维持一个指向Component对象的指针
ConcreteDrcorator
向组件添加职责
适用性
添加职责
处理那些可以撤销的职责
当不能采用生成子类的1方法进行扩充时
Facade(外观)
意图
提供一致界面
结构
Facade
知道哪些子系统类负责处理请求
Subsystem classes
实现子系统的功能
适用性
为复杂子系统提供一个简单接口
客户程序与抽象类的实现部分之间存在很大的依赖性,为提高独立性和移植性
当需要构建一个层次结构的系统时
Flyweight(享元)
意图
支持大量细粒度的对象
Proxy(代理)
意图
提供代理
总
Adapter模式和Bridge模式的区别:适配器在类定以后使用,桥接在类定义前
Composite和Decorator通常协同使用
行为型 功能,状态,行为,职责分配
Chain of Responsibility(责任链)
意图
将对象连成一条链
适用性
多个对象处理一个请求
想在不明确指定接收者的情况下向多个对象中的一个提交一个请求
Command(命令)
意图
将一个请求封装为一个对象
适用性
支持取消操作
支持修改日志
在不同的时刻指定,排列和执行请求
Interpreter(解释器)
意图
定义一个解释器
适用性
文法简单
效率不是一个关键问题
Iterator(迭代器)
意图
顺序访问聚合对象中的各个元素
适用性
支持对聚合对象的多种遍历
聚合对象
Mediator(中介者)
意图
中介对象封装一系列对象交互
适用性
一组对象之间的复杂通信
通信直接
不想生成太多子类
Memento(备忘录)
意图
不破坏封装性的前提下捕获一个对象的内部状态
适用性
保存状态
在会被破坏封装性的情况下
Observer(观察者)
意图
一个对象状态改变,其余依赖他的对象接到通知并被自动更新
适用性
一个改变其他
相互依赖,独立改变并复用
State(状态)
意图
对象似乎修改了他的类
适用性
根据状态改变行为
一个操作中含有庞大的多分支语句,且这些分支依赖于该对象的状态
Strategy(策略)
意图
定义一系列算法,把他们一个个封装起来,并且使他们可以相互替换
适用性
许多相关的类仅仅是行为有异
需要使用一个算法的行为变体
算法使用客户不应该知道的数据
一个类定义了多种行为
Template Method(模板方法)
意图
算法骨架
适用性
提取公共部分
控制子类扩展
Visitor(访问者)
意图
不改变各元素类的前提下定义元素的新操作
适用性
定义操作
0 条评论
下一页