![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
文章平均质量分 85
流年ln
这个作者很懒,什么都没留下…
展开
-
24 访问者模式
定义访问者模式(Visitor Pattern):表示一个作用于某对象结构中的各个元素操作。访问者模式让用户可以在不改变各元素的类的前提下定义作用于这些元素的新操作。结构Visitor(抽象访问者):抽象访问者为对象结构中的每一个具体元素类声明一个访问操作,从这个操作的名称或参数类型可以清楚地知道需要访问的具体元素类型,具体访问者需要实现这些操作方法,定义对这些元素的访问操作。ConcreteVisitor(具体访问者):具体访问者实现了每个由抽象访问者声明的操作,每一个操作用于访问对象结构中的一原创 2020-06-14 10:04:31 · 148 阅读 · 0 评论 -
23 模板方法模式
定义模板方法模式(Template Method Pattern):定义一个操作中算法的框架,而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。结构AbstractClass(抽象类):在抽象类中定义一系列基本操作(Primitive Operations),这些基本操作可以是具体的,也可以是抽象的,每一个基本操作对应算法的一个步骤,在其子类中可以重定义或实现这些步骤。同时在抽象类中实现了一个模板方法(Template Method),用于定义一个原创 2020-06-14 10:03:45 · 98 阅读 · 0 评论 -
22 策略模式
定义策略模式(Strategy Pattern):定义一系列算法,将每一个算法封装起来,并让它们可以相互替换。策略模式算法可以独立于使用它的客户而变化。结构Context(环境类):环境类是使用算法的角色,它在解决某个问题(即实现某个功能)时可以采用多种策略。在环境类中维持一个对抽象策略类的引用实例,用于定义所采用的策略。Strategy(抽象决策类):抽象决策类为所有支持的算法声明了抽象方法,是所有策略类的父类,他可以是抽象类或具体类,也可以是接口。环境类通过抽象策略类中声明的方法在运行时调用具原创 2020-06-13 17:26:32 · 110 阅读 · 0 评论 -
21 状态模式
定义状态模式(State Pattern):允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。结构Context(环境类):环境类又称为上下文类,它是拥有多种状态的对象。由于环境类的状态存在多样性且在不同状态下对象的行为有所不同,因此将状态独立出去形成单独的状态类。在环境类中维护一个抽象状态类State的实例,这个实例定义当前状态,在具体实现时它是一个State的子类对象。State(抽象状态类):它用于定义一个接口以封装与环境类的一个特定状态相关的行为,在抽象状态类中声明了原创 2020-06-09 20:00:00 · 108 阅读 · 0 评论 -
20 观察者模式
定义观察者模式(Observer Pattern):定义对象之间的一种一对多的依赖关系,使得每当一个对象状态发生改变时其相关的依赖对象皆得到通知并且被自动更新。结构Subject(目标):目标又称为主题,它是指被观察的对象。在目标中定义了一个观察者集合,一个观察目标可以接受任意数量的观察者来观察,它提供一些列方法来增加或删除观察者对象,同时它定义了通知方法notify()。目标类可以是接口,也可以是抽象类或具体类。ConcreteSubject(具体目标):具体目标是目标类的子类,它通常包含有经常原创 2020-06-07 14:13:35 · 119 阅读 · 0 评论 -
19 备忘录模式
定义备忘录模式(Memento Pattern):在不破坏封装的前提下捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的装填。结构Originator(原发器):原发器是一个普通类,它通过创建一个备忘录来存储当前内部状态,也可以使用备忘录来恢复其内部状态,一般将系统中需要保存内部状态的类设计为原发器。Memento(备忘录):备忘录用于存储原发器的内部状态,根据原发器来决定保存哪些内部状态。备忘录的设计一般可以参考原发器的设计,根据实际需要确定备忘录中的属性。原创 2020-06-06 09:40:59 · 129 阅读 · 0 评论 -
18 中介者模式
定义中介者模式(Mediator Pattern):定义一个对象来封装一系列对象的交互。中介者模式使各对象之间不需要显示地相互引用,从而使其耦合松散,而且用户可以独立地改变他们之间的交互。结构Mediator(抽象中介者):它定义一个接口,该接口用于与各同事对象之间进行通信。ConcreteMediator(具体中介者):它是抽象中介者的子类,通过协调各个同事对象来实现协作行为,它维持了对各同事对象的引用。Colleague(抽象同事类):它定义各个同事类共有的方法,并申明了一些抽象方法供子类实原创 2020-06-06 08:52:41 · 90 阅读 · 0 评论 -
17 迭代器模式
定义迭代器模式(Interator Pattern):提供一种方法顺序访问一个聚合对象中的各个元素,而又不用暴露该对象的内部表示。结构Iterator(抽象迭代器):它定义了访问和遍历元素的接口,声明了用于遍历元素的方法,例如用于获取第一个元素的first()方法、用于访问下一个元素的next()方法、用于判断是否还有下一个元素的hasNext()方法、用于获取当前元素的currentItem()方法等,在具体迭代器中将实现这些方法。ConcreteInterator(具体迭代器):它实现了抽象迭原创 2020-06-03 19:24:15 · 118 阅读 · 0 评论 -
16 解释器模式
定义解释器模式(Interpreter Pattern):给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。结构AbstractExpression(抽象语法):在抽象表达式中声明了抽象的解释操作,它是所有终结符表达式和非终结表达式的公共父类。TerminalExpression(终结符表达式):终结符表达式是抽象表达式的子类,它实现了与文法中的终结符相关联的解释操作,在句子中的每一个终结符都是该类的一个实例。通常在一个解释器模式中只有少数几个终结符表原创 2020-05-31 09:26:57 · 128 阅读 · 0 评论 -
15 命令模式
定义命令模式(Command Pattern):将一个请求封装为一个对象,从而可用不同的请求对客户端进行参数化,对请求排队或者记录请求日志,以及支持可撤销的操作。结构Command(抽象命令类):抽象命令类一般是一个抽象类或接口,在其中声明了用于执行请求的execute()等方法,通过这些方法可以调用请求接受者的相关操作。ConcreteCommand(具体命令类):具体命令类是抽象命令类的子类,实现了在抽象命令类中声明的方法,它对应具体的接收者对象,将接受者对象的动作绑定其中。具体命令类在实现e原创 2020-05-30 08:46:13 · 202 阅读 · 0 评论 -
14 责任链模式
定义责任链模式(Chain of Responsibility Pattern):避免将一个请求的发送者与接受者耦合在一起,让对个对象都有机会处理请求。将接受者的对象连接成一条链,并且沿着这条链传递请求,直到有一个对象能够处理它为止。结构Handler(抽象处理者):它定义了一个处理请求的接口,一般设计为抽象类,由于不同的具体处理者处理请求的方式不同,因此在其中定义了一个抽象请求处理方法。每一个处理这的下家还是一个处理者,故在抽象处理者中定义了一个抽象处理者类型对象作为其对下家的引用,通过该引用处理原创 2020-05-27 19:24:53 · 161 阅读 · 0 评论 -
13 代理模式
定义代理模式(Proxy Pattern):给某一个对象提供一个代理或占位符,并由代理对象来控制对象的访问。结构Subject(抽象主题角色):它声明了真实主题和代理主题的共同接口,这样一来在任何使用真实主题的地方都可以使用代理主题,客户端通常需要针对抽象主题角色进行编程。Proxy(代理主题角色):它包含了对真实主题的引用,从而可以在任何时候操作真实主题对象;在代理主题角色中提供了一个与真实主题角色相同的接口,以便在任何时候都可以替代真实主题;代理主题角色还可以控制真实主题的使用,负责在需要的时原创 2020-05-25 19:43:57 · 160 阅读 · 0 评论 -
12 享元模式
定义享元模式(Flyweight Pattern):运用共享技术有效地支持大量细粒度对象的复用。结构Flyweight(抽象享元类):抽象享元类通常是一个接口或抽象类,在抽象享元类中声明了具体享元类公共的方法,这些方法可以向外界提供享元对象的内部数据(内部状态),同时也可以通过这些方法来这只外部数据(外部状态)。ConcreteFlyweight(具体享元类):具体享元类实现了抽象享元类,其实例称为享元对象;在具体享元类中为内部状态提供了存储空间。通常可以结合单例模式来设计具体享元类,为每一个具体原创 2020-05-24 09:42:17 · 104 阅读 · 0 评论 -
11 外观模式
定义外观模式(Facade Pattern):为子系统中的一组接口提供一个统一的入口。外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。结构Facade(外观角色):在客户端可以调用它的方法,在外观角色中可以知道相关(一个或多个)子系统的功能和职责;在正常情况下,它将所有从客户端发来的请求委派到相应的子系统,传递给相应的子系统对象处理。SubSystem(子系统角色):在软件系统中可以有一个或多个子系统角色,每一个子系统可以不是一个单独的类,而是一个类的集合,它实现子系统的功能;每一原创 2020-05-21 19:21:34 · 158 阅读 · 0 评论 -
10 装饰模式
定义装饰模式(Decorator Pattern):动态地给一个对象增加一些额外的职责。就扩展功能而言,装饰模式提供了一种比使用子类更加灵活的替代方案。结构Component(抽象构件):它是具体构件和抽象装饰类的共同父类,声明了在具体构件中实现的业务方法,它的引入可以使客户端以一致的方式处理未被装饰的对象以及装饰之后的对象,实现客户端的透明操作。ConcreteComponent(具体构件):它是抽象构件类的子类,用于定义具体的构件对象,实现了在抽象构件中声明的方法,装饰类可以给它增加额外的职责原创 2020-05-20 19:36:59 · 135 阅读 · 0 评论 -
09 组合模式
定义组合模式(Composite Pattern):组合多个对象形成树形结构以表示具有部分-整体关系的层次结构。组合模式让客户端可以统一对待单个对象和组合对象。结构Component(抽象构建):它可以是结构或抽象类,为叶子构件和容器构件对象声明接口,在该角色中可以包含所有子类共有行为的声明和实现。在抽象构建中定义了访问及管理它的子构件的方法,如增加子构建、删除子构件、获取子构建等。Leaf(叶子构建):它在组合结构中表示叶子结点对象,叶子结点没有子结点,它实现了在抽象构件中定义的行为。对于那些访原创 2020-05-14 20:00:29 · 148 阅读 · 0 评论 -
08 桥接模式
定义桥接模式(Bridge Pattern):将抽象部分和它的实现部分解耦,使得两者能够独立自主变化。结构Abstraction(抽象类):它是用于定义抽象类的接口,通常是抽象类而不是接口,其中定义了一个Implementor(实现类接口)类型的对象并可以维护该对象,它与Implementor之间具有关联关系,它既可以包含抽象业务方法,也可以包含具体业务方法。RefinedAbstraction(扩充抽象类):它扩充由Abstraction 定义的接口,通常情况下它不再是抽象类而是具体类,实现了在原创 2020-05-13 19:46:14 · 156 阅读 · 0 评论 -
07 适配器模式
定义适配器模式(Adapter Pattern):将一个类的接口转换成客户端希望的另一个接口。适配器模式让那些接口不兼容的类可以一起工作。模式结构与实现Target(目标抽象类):目标抽象类定义客户端所需要的的接口,可以是一个抽象类或接口,也可以是具体类。在适配器中,由于Java语言不支持多继承,它只能是接口。Adapter(适配器类):它可以调用另一个接口,作为一个转换器,对Adaptee和Target进行适配。适配器Adapter是适配器模式的核心,在类适配器中,它通过实现Target接口并继原创 2020-05-11 19:04:20 · 373 阅读 · 0 评论 -
06 单例模式
定义单例模式(Singleton Pattern):确保一个类只有一个实例,并提供全局访问点来访问这个唯一实例代码饿汉式单例public class Singleton1 { private static final Singleton1 SINGLETON_1 = new Singleton1(); private Singleton1() {} ...原创 2020-05-06 19:28:07 · 95 阅读 · 0 评论 -
05 原型模式
定义原型模式(Prototype):使用原型实例指定待创建对象的类型,并且通过复制这个原型来创建新的对象。结构Porototype(抽象原型类):它是声明克隆方法的接口,是所有具体原型类的公共父类,它可以是接口,甚至可以是具体实现类。ConcretePrototype(具体原型类):它实现在抽象原型类中声明的克隆方法,在克隆方法中返回自己的一个克隆对象。Client(客户类):在客户类...原创 2019-12-09 19:47:26 · 106 阅读 · 0 评论 -
04 建造者模式
定义建造者模式(Builder):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。结构Builder(抽象建造者):它为创建一个产品对象的各个部件指定抽象接口,在该接口中一般声明两类方法,一类方法是buildPartX(),用于创建复杂对象的各个部件;另一类方法是getResult(),用于返回复杂对象。Builder既可以是抽象类,也可以是接口。ConcreteBuilder(具体建造者):它实现了Builder接口,实现各个部件的具体构造和装配方法,定义并明确所创建的原创 2020-05-12 17:52:22 · 105 阅读 · 1 评论 -
03 抽象工厂模式
产品族与等级结构产品等级结构:产品等级结构即产品的继承结构。产品族:产品族是指由同一个工厂生产的,位于不同产品等级结构中的一组产品。结构AbstractFactory(抽象工厂):他申明了一组用于创建一族产品的方法,每一个方法对应一种产品。ConcreteFactory(具体工厂):它实现了在抽象工厂中申明的创建产品的方法,生成一组具体产品,这些产品构成了一个产品族,每一个产品都位于某...原创 2019-11-25 19:32:10 · 74 阅读 · 0 评论 -
02 工厂方法模式
结构Product(抽象产品):它是定义产品的接口,是工厂方法模式所创建对象的超类型,也就是产品对象的公共父类。ConcreteProduct(具体产品):它实现了抽象产品接口,某种类型的具体产品由专门的具体工厂创建,具体工厂和具体产品之间一对应。Factory(抽象工厂):在抽象工厂类中声明了工厂方法(Factory Method),用于返回一个产品。抽象工厂是工厂方法模式的核心,所有...原创 2019-11-24 14:32:32 · 95 阅读 · 0 评论 -
01 简单工厂模式
结构Factory(工厂角色):工厂角色即工厂类,它是简单工厂模式的核心,负责实现创建所有产品实例的内部逻辑;工厂类可以被外界直接调用,创建所需的产品对象;在工厂类中提供了静态的工厂方法factoryMethod(),它的返回示例为抽象产品类型Procut。Product(抽象产品角色):它是工厂类创建的所有对象的父类,封装了各种产品对象的共有方法,它的引入将提高系统的灵活性,使得在工厂类中...原创 2019-11-23 13:05:45 · 123 阅读 · 0 评论