设计模式
设计模式
创建
abstract factory 抽象工厂
一个object来创建一系列(多个)对象,此object有相应创建的method
例,创建不同风格的同一类UI元素
builder 生成器
将分析的算法与创建、表示的算法分离
例,读取解析文本文件以生成字符串或ui text
factory method 工厂方法
由子类指定具体创建的对象,用method创建对象,一般只单个
例,app类中create_doc() 创建doc对象,具体的实现由app的子类my_app定义,创建的是doc子类my_doc的对象
prototype 原型
对象实例通过克隆自己创建新对象,动态创建
例,通过选择工具栏的图形编辑器中元素创建相应的图形元素
singleton 单件
类只能实例化一个对象
例,系统中只能唯一存在的部件,唯一的管理器...
结构
adapter 适配器
复用接口不兼容的类,使能直接使用
例,系统使用接口A,已有已实现同样功能的接口A_other的类,继承A并在子类实现中调用A_other接口
bridge 桥接
将抽象部分和实现部分分离,放在独立的类层次机构中
例,不同操作系统下显示同一类ui,抽象部分描述ui的画法(如画多少线段,什么位置画),具体每个元素(如线段、方框)的画法实现根据在不同系统下调用不同api
composite 组合
表示整体-部分的结构,实现有相同接口的又可以包含其他同接口元素的容器
例,复杂ui元素,包含了一些列其他ui元素(基本的和复杂的)
decorator 装饰
以非继承的方式扩充类的功能,与原来类拥有相同接口
例,生成有边框的ui元素或有滚动条的ui元素
facade 外观
统一暴露给外部使用的高层接口,在原有结构上加层
例,给子系统实现api层,以便外部使用子系统
flyweight 享元
不同元素共享内部状态即同一个对象,不同的外部状态通过参数传递相同内部状态对象,以表现出不同元素的不同行为
例,显示字符,字符内容为内部状态被不同显示共享,显示位置、大小作为参数从外部指定
proxy 代理
为具体对象的使用添加一代理,方便外部其他对象使用此具体对象。可在代理操作具体对象的基础上添加附加操作。
例,为图片对象的使用添加一代理,操作代理使得只在外部真正显示图片时才真正读取并创建图片对象
行为
chain of responsibility 职责链
使多个对象有处理请求的机会,解耦发送者和接收者
例,ui中每个元素都提供帮助信息,被处理的帮助请求在职责链上传递,直到能处理都元素对象
command 命令
提出请求的对象不知道或不需要直到如何具体操作,将要执行都请求及其执行操作封装到一个对象中。将调用操作的对象和实现操作的对象解耦
例,点击菜单栏、工具栏执行一项命令或功能或操作,菜单栏、工具栏本身不需要直到具体操作如何执行,使用具体的命令对象即可
interpreter 解释器
?
例,搜索匹配一个模式的字符串
iterator 迭代器
按一定顺序访问容器内元素,又不暴露容器内部结构
例,list iterator
mediator 中介者
中介使组中对象不再相互引用,松散耦合
例,一个对话框中包含多个相关联ui元素,某一ui元素变化时只通知中介者,再有中介通知相关其他ui元素
memento 备忘录
保存对象状态信息,以便之后恢复对象状态
例...
observer 观察者
一个对象改变时需要通知依赖前者的其他对象
例,同一model有多个view表示,model改变时通知所有view改变显示内容
state 状态
对象在不同状态下同一类操作表现出不同行为
例,tcp连接在不同状态下对请求做不同的处理回应
strategy 策略
使算法独立于使用它的客户而变化
例,使用不同的方法、算法判断一行英文是否换行、加连词符
template method 模板方法
父类抽象出算法的不变部分,在子类中实现具体可变部分
例,app类抽象出open_doc()方法,当doc不存在时调用create_doc()方法,后者方法的具体实现在my_app类中定义
visitor 访问者
对象结构变化少,但对象操作变化多或需经常扩展。对象接受访问者时,向访问者发送对象自身作为参数。
例,字母、符合等不同元素接受拼写检查、代码生成等操作,将不同元素等同样操作横向分为类
说明 · · · · · ·
表示其中内容是对原文的摘抄