![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
文章平均质量分 65
在阅读《设计模式:可复用面向对象软件的基础》过程中整理关键文本,并用Java语言实现其中的描述的设计模式。
CoderZhangSan
这个作者很懒,什么都没留下…
展开
-
OBSERVER(观察者)-- 对象行为模式
将一个系统分割成一系列相互协作的类有一个常见的副作用:需要维护相关对象间的一致性。定义对象间地一种一对多地依赖关系,当一个对象地状态发生改变时,所有对于依赖于它的对象都得到通知并被自动更新。b. 当一个对象必须通知其它对象,而它有不能假定其他对象是谁。Mediator:通过封装复杂的更新语义,ChangeManager充当目标和观察者之间的中介者。实现Observer的更新接口以使自身状态与目标的状态保持一致。当它的状态发生改变时,向它的各个观察者发生通知。存储有关状态,这些状态应与目标的状态保持一致。原创 2024-05-01 15:52:35 · 30 阅读 · 0 评论 -
MEMENTO(备忘录)-- 对象行为型模式
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。b. 如果一个用接口来让其它对象直接得到这些状态,将会暴露对象的实现细节并破坏对象的封装性。a. 必须保存一个对象在某一时刻的(部分)状态,这样以后需要时它才能恢复到先前的状态。备忘录存储原发器对象的内部状态。原发器根据需要决定备忘录存储原发器的哪些内部状态。a. Command: 命令可以使用备忘陆来为可撤销的操作维护状态。原发器创建一个备忘录,用以记录当前时刻它的内部状态。防止原发器以外的其它对象访问备忘录。原创 2024-04-20 09:47:43 · 184 阅读 · 0 评论 -
MEDIATOR(中介者)-- 对象行为模式
Facade与中介者不同之处在于它是对于一个对象子系统进行抽象,从而提供了一个更为方便地接口。它的协议是单向的,即Facade对象对这个子系统提出请求,但反之则不行。相反,Mediator提供了各Colleague对象不支持或不能支持的协作行为,而且协议是多向的。可以通过将集体行为封装在一个单独的中介者(mediator)对象中以避免这个问题。每一个同事对象在需与其他的同事通信的时候,与它的中介者通信。中介者定义一个接口用于与各同事对象通信。每一个同事类都知道它的中介者对象。了解并维护它的各个同事。原创 2024-04-16 08:59:21 · 316 阅读 · 0 评论 -
ITERATOR(迭代器)-- 对象行为模式
这一模式的关键思想是将对列表的访问和遍历从列表对象中分离出来并放入一个迭代器(iterator)对象中。具体聚合实现创建相应迭代器的接口,该操作返回ConcreteIterator的适当实例。ConcreteIterator跟踪聚合中的当前对象,并能够计算出待遍历的后继对象。提供一种方法顺序访问一个聚合对象中各个元素,而又不需要暴漏该对象的内部表示。a. 访问一个聚合对象的内容而无需暴露它的内部表示。c. 为遍历不同的聚合结构体统一个统一的接口。b. 支持对聚合对象的多种遍历。迭代器访问的遍历元素的接口。原创 2024-04-12 15:42:47 · 225 阅读 · 1 评论 -
INTERPRETER(解释器)-- 类行为模式
为文法中的非终结符实现解释操作(Interpret)操作。给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。当有一个语言需要解释执行,并且你可将该语言中的句子表示为一个抽象语法树时候,可使用解释器模式。的每个符号都维护一个AbstractExpression类型的实例变量。声明一个抽象的解释操作,这个接口为抽象语法树中所有的节点所共享。Visitor:可用一个类中维护抽象语法树中的各节点的行为。一个句子中的每个终结符需要该类的一个实例。的那些对象的解释操作。原创 2024-04-06 11:06:39 · 766 阅读 · 1 评论 -
COMMAND(命令)--对象行为型模式
Memento模式可用来保存莫格状态,命令用这一状态来取消它的效果。知道如何实施与执行一个请求相关的操作。a. 将对用操作的对象与知道如何实现该操作的对象解耦。e. 用构建在原语操作上的高层操作构造一个系统。b. 支持取消(undo)和重做(redo)。a. 抽象出待执行的动作以参数化某对象。b. 在不同的时刻指定、排列和执行请求。创建一个具体命令对象并设定它的接收者。c. 可将多个命令装配成一个复合命令。a. 一个命令对象应达到何种智能程度。b. Command是头等的对象。c. 支持取消操作。原创 2024-03-19 14:47:38 · 199 阅读 · 0 评论 -
CHAIN OF RESPONSIBILITY(职责链)-- 对象行为型模式
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,知道有一个对象处理它为止。当客户提交一个请求时,请求沿着链传递直至有一个ConcreteHandler对象负责处理它。b. 你想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。a. 有多个对象可以处理一个请求,哪个对象处理请求运行时刻自动确定。a. 实现后继者链:1)定义新的链接。c. 可处理一个请求的对象集合应被动态指定。向链上的具体处理对象提交请求。定义一个处理请求的接口。原创 2024-03-18 10:37:58 · 333 阅读 · 0 评论 -
PROXY(代理)-- 对象结构型模式
Decorator:尽管decorator的实现部分与代理相似,当decorator的目的不一样。Decorator为对象添加一个或多个功能,而代理则控制对对象的访问。定义RealSubject和Proxy的共用接口,这样就在任何使用RealSubject的地方都可以使用Proxy。1)Remote Proxy负责对请求及其参数进行编码,并向不同地址空间中的实体发送已编码的请求。提供一个与Subject的接口相同的接口,这样代理就可以用来代替实体。为其他对象提供一种代理以控制对这个对象的访问。原创 2024-03-03 11:36:49 · 351 阅读 · 0 评论 -
FLYWEIGHT(享元)-- 对象结构型模式
a. flyweight执行时所需的状态必定是内部的或外部的。b. 用户不应该直接对ConcreteFlyweight类进行实例化,而只能从FlyweightFactory对象得到ConcreteFlyweight对象,这可以保证它们适当的进行共享。在Flyweight对象结构的某些层次,UnsharedConcreteFlyweight对象通常将ConcreteFlyweight对象作为子节点。它所存储的状态必须是内部的;d. 如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象。原创 2024-01-29 11:53:08 · 918 阅读 · 0 评论 -
FACADE(外观)-- 对象结构型模式
为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。a. 客户程序通过发送请求给Facade的方式与子系统通讯,Facade将这些消息转发给适当的子系统对象。a. 它对客户屏蔽子系统组件,因而减少了客户处理的对象的数目并使得子系统使用起来更加方便。c. 当你需要构建一个层次结构的子系统时,使用facade模式定义子系统中每层的入口点。b. 它实现了子系统与客户之间的松耦合关系,而子系统内部的功能组件往往是紧耦合的。b. 公共子系统与私有子系统类。原创 2024-01-26 10:15:56 · 365 阅读 · 1 评论 -
COMPOSITE(组合)-- 对象结构型模式
Visitor将本来应该分布在Composite和Leaf类中的操作和行为局部化。d. Client: 通过Component接口操纵组合部件的对象。用户使用Component类接口与与组合结构中的对象进行交互。b. Leaf: 在组合中表示叶节点对象,叶节点没有子节点。c. Composite: 定义所有子部件的那些部件的行为。声明一个接口用于访问和管理Component的子组件。a. Component:为组合中的对象声明接口。在Component接口中实现与子部件有关的操作。原创 2024-01-22 11:39:51 · 842 阅读 · 0 评论 -
BRIDGE(桥接)-- 对象结构型模式
c. Implementor: 定义实现类的接口,该接口不一定要与Abstraction的接口完全一致;a. Abstraction: 定义抽象类的接口。d. ConcreteImplementor: 实现Implementor接口并定义它的的具体实现。c. 对一个抽象的实现部分的修改应对客户不产生影响,即客户的代码不必重新编译。b. 类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充。a. 你不希望在抽象和它的实现部分之间有一个固定的绑定关系。d. 你想对客户完全隐藏抽象的实现部分。原创 2024-01-21 18:17:06 · 1110 阅读 · 1 评论 -
ADAPTER(适配器)-- 类对象结构型模式
c. (仅适用于对象Adapter)你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。b. 你想创建一个可以复用的类,该类可以与其他不相关的类或者不可预见的类(即那些接口可能不一定兼容的类)协同工作。b. 使得Adapter可以重定义Adapter的部分行为,因为Adapter是Adaptee的一个子类。d. Adapter: 对Adaptee的接口与Target接口进行适配。a. 你想使用一个已经存在的类,而它的接口不符合你的需求。将一个类的接口转换成客户希望的另外一个接口。原创 2024-01-21 16:23:04 · 820 阅读 · 1 评论 -
ABSTRACT FACTORY(抽象工厂) -- 对象创建型模式
意图: 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类型别名:Kit动机:考虑一个支持多种视感(look-and-feel)标准的用户界面工具包。适用性:a. 一个系统要独立于它得产品的创建、组合和表示时。b. 一个系统要由多个产品系列中的一个来配置时。c. 当你要强调一系列相关产品的对象的设计以便进行联合使用。d. 当你提供一个产品类库,而只想显示它们的接口而不是实现时。结构:参与者:a. AbstractFactory:声明一个创建抽象产品对象的操作接口。原创 2024-01-15 18:16:03 · 311 阅读 · 0 评论 -
PROTOTYPE(原型)--对象创建型模式
当一个系统应该独立于它的产品产品创建、构成和表示时,要使用Prototype模式;Abstract Factory可以存储一个被克隆的原型集合,并返回产品对象。用原型实列指定创建对象的种类,并且通过拷贝这些原型创建新的对象。ConcretePrototype: 实现一个克隆自身的操作。Client:让一个原型克隆自生从而创建一个新的对象。为了避免创建一个与产品类层次平行的工厂类层次时;当一个类的实例只能有几个不同状态组合中的一种时。ProtoType:声明一个克隆自生的接口。客户端请求一个原型克隆自身。原创 2024-01-19 11:24:55 · 353 阅读 · 1 评论 -
SINGLETON(单件、单例)-- 对象创建型模式
定义一个Instance操作,运行客户访问它的唯一实例。Instance是一个类操作(即C++中的一个静态成员函数和Java中的静态方法)。很多模式可以用Singleton模式实现。例如:Abstract Factory、Builder和Prototype。客户只能通过Singleton的Instance操作访问一个Singleton的实例。b. 创建Singleton类的子类。可能负责创建它自己的唯一实例。c. 允许对操作和表示的精化。a. 对唯一实例的受控访问。a.保证一个唯一的实现。原创 2024-01-19 16:43:30 · 386 阅读 · 1 评论 -
FACTORY METHOD(工厂方法)-- 对象创建型模式
c. 当类将创建对象的职责委托给多个帮助子类中的某一个,并且希望将哪一个子类是代理这一信息局部化的时候。Creator依赖于它的子类来定义工厂方法,所以它返回一个适当的ConcreteProduct实例。Creator也可以定义一个工厂方法的缺省实现它返回一个缺省的ConcreteProduct对象。a. 主要有两种不同的情况: 1.Creator类是一个抽象类并且不提供它声明的工厂方法实现。b. 当一个类希望由它的子类来指定它所创建的对象的时候。a. 当一个类不知道它所必须创建的对象的类的时候。原创 2024-01-17 16:47:17 · 360 阅读 · 0 评论 -
BUILDER(生成器) -- 对象创建型模式
b. 一旦产品部件被生成,导向器(Director)就会通知生成器(ConcreteBuilder)。a. 客户端创建Director对象,并用它所想要的Builder对象进行配置。a. Builder: 为创建一个Product对象的各个部件指定抽象接口。c. Director: 构造一个使用Builder接口的对象。包含定义组成部件的类,包括将这些部件装配成最终产品的接口。实现Builder的接口以构建和装配该产品的各个部件。c. 生成器处理导线器的请求,并将部件添加到该产品中。表示被构造的复杂对象。原创 2024-01-17 10:54:59 · 358 阅读 · 0 评论