设计模式
雷老汉
要學的東西好多啊......
展开
-
每日学习一个设计模式--访问者模式
访问者模式定义将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作,为数据结构中的每个元素提供多种访问方式。它将对数据的操作与数据结构进行分离,是行为型模式中最复杂的一种模式(访问者(Visitor)模式是一种对象行为型模式)结构抽象访问者(Visitor)角色:定义一个访问具体元素的接口,为每个具体元素类对应一个访问操作 visit() ,该操作中的参数类型标识了被访问的具体元素。具体访问者(ConcreteVisitor原创 2020-07-09 14:46:20 · 194 阅读 · 0 评论 -
每日学习一个设计模式--备忘录模式
备忘录模式定义在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先保存的状态。该模式又叫快照模式结构发起人(Originator)角色:记录当前时刻的内部状态信息,提供创建备忘录和恢复备忘录数据的功能,实现其他业务功能,它可以访问备忘录里的所有信息。备忘录(Memento)角色:负责存储发起人的内部状态,在需要的时候提供这些内部状态给发起人。管理者(Caretaker)角色:对备忘录进行管理,提供保存与获取备忘录的功能,但其不能对原创 2020-07-08 11:26:18 · 218 阅读 · 0 评论 -
每日学习一个设计模式--迭代器模式
迭代器模式定义提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。迭代器模式是一种对象行为型模式,其主要优点如下结构抽象聚合(Aggregate)角色:定义存储、添加、删除聚合对象以及创建迭代器对象的接口。具体聚合(ConcreteAggregate)角色:实现抽象聚合类,返回一个具体迭代器的实例。抽象迭代器(Iterator)角色:定义访问和遍历聚合元素的接口,通常包含 hasNext()、first()、next() 等方法。具体迭代器(Concretelter原创 2020-07-08 11:25:00 · 166 阅读 · 0 评论 -
每日学习一个设计模式--中介者模式
中介者模式定义定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。中介者模式又叫调停模式,它是迪米特法则的典型应用结构抽象中介者(Mediator)角色:它是中介者的接口,提供了同事对象注册与转发同事对象信息的抽象方法具体中介者(ConcreteMediator)角色:实现中介者接口,定义一个 List 来管理同事对象,协调各个同事角色之间的交互关系,因此它依赖于同事角色抽象同事类(Colleague)角色:定义同事类的接口,保存中介者对象原创 2020-07-07 11:30:04 · 165 阅读 · 0 评论 -
每日学习一个设计模式--状态模式
状态模式定义对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为;状态模式把受环境改变的对象行为包装在不同的状态对象里,其意图是让一个对象在其内部状态改变的时候,其行为也随之改变(环境类包含状态类对象,不同状态设置不同的状态对象,将不同状态下的行为实现放到状态类中)结构环境(Context)角色:也称为上下文,它定义了客户感兴趣的接口,维护一个当前状态,并将与状态相关的操作委托给当前状态对象来处理。抽象状态(State)角色:定义一个接口,原创 2020-07-06 13:38:35 · 138 阅读 · 0 评论 -
每日学习一个设计模式--命令模式
命令模式定义将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理结构抽象命令类(Command)角色:声明执行命令的接口,拥有执行命令的抽象方法 execute()。具体命令角色(Concrete Command)角色:是抽象命令类的具体实现类,它拥有接收者对象,并通过调用接收者的功能来完成命令要执行的操作。实现者/接收者(Receiver)角色:执行命令功能的相关操作,是具体命令对象业务的原创 2020-07-05 11:17:16 · 178 阅读 · 0 评论 -
每日学习一个设计模式--策略模式
策略模式定义该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理结构抽象策略(Strategy)类:定义了一个公共接口,各种不同的算法以不同的方式实现这个接口,环境角色使用这个接口调用不同的算法,一般使用接口或抽象类实现具体策略(Concrete Strategy)类:实现了抽象策略定义的接口,提供具体的算法实现环境(C原创 2020-07-04 17:12:22 · 129 阅读 · 0 评论 -
每日学习一个设计模式--组合模式
组合模式定义有时又叫作部分-整体模式,它是一种将对象组合成树状的层次结构的模式,用来表示“部分-整体”的关系,使用户对单个对象和组合对象具有一致的访问性结构抽象构件(Component)角色:它的主要作用是为树叶构件和树枝构件声明公共接口,并实现它们的默认行为。在透明式的组合模式中抽象构件还声明访问和管理子类的接口;在安全式的组合模式中不声明访问和管理子类的接口,管理工作由树枝构件完成。树叶构件(Leaf)角色:是组合中的叶节点对象,它没有子节点,用于实现抽象构件角色中 声明的公共接口原创 2020-06-29 12:54:31 · 129 阅读 · 0 评论 -
每日学习一个设计模式--享元模式
享元模式定义运用共享技术来有効地支持大量细粒度对象的复用。它通过共享已经存在的又橡来大幅度减少需要创建的对象数量、避免大量相似类的开销,从而提高系统资源的利用率结构抽象享元角色(Flyweight):是所有的具体享元类的基类,为具体享元规范需要实现的公共接口,非享元的外部状态以参数的形式通过方法传入具体享元(Concrete Flyweight)角色:实现抽象享元角色中所规定的接口非享元(Unsharable Flyweight)角色:是不可以共享的外部状态,它以参数的形式注入具体享元的相原创 2020-06-28 12:57:37 · 182 阅读 · 0 评论 -
每日学习一个设计模式--外观模式
定义是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体的细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。结构外观(Facade)角色:为多个子系统对外提供一个共同的接口。子系统(Sub System)角色:实现系统的部分功能,客户可以通过外观角色访问它。客户(Client)角色:通过一个外观角色访问各个子系统的功能。实现public class FacadePattern{原创 2020-06-24 14:37:35 · 153 阅读 · 0 评论 -
每日学习一个设计模式--装饰者模式
装饰模式定义指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式结构抽象构件(Component)角色:定义一个抽象接口以规范准备接收附加责任的对象具体构件(Concrete Component)角色:实现抽象构件,通过装饰角色为其添加一些职责抽象装饰(Decorator)角色:继承抽象构件并包含具体构件的实例,可以通过其子类扩展具体构件的功能具体装饰(ConcreteDecorator)角色:实现抽象装饰的相关方法,并给具体构件对原创 2020-06-19 11:24:13 · 160 阅读 · 0 评论 -
每日学习一个设计模式--桥接模式
桥接模式定义桥接(Bridge)模式的定义如下:将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。某些类具有两个或多个维度的变化,如图形既可按形状分,又可按颜色分。具体来说, 就是抽取其中一个维度并使之成为独立的类层次, 这样就可以在初始类中引用这个新层次的对象, 从而使得一个类不必拥有所有的状态和行为。结构抽象化(Abstraction)角色:定义抽象类,并包含一个对实现化对象的引用。(基础维度)扩展抽象化(Refined原创 2020-06-18 14:50:25 · 174 阅读 · 0 评论 -
每日学习一个设计模式--适配器模式
适配器模式定义将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。适配器模式分为类结构型模式和对象结构型模式两种,前者类之间的耦合度比后者高,且要求程序员了解现有组件库中的相关组件的内部结构,所以应用相对较少些。模式的结构目标(Target)接口:当前系统业务所期待的接口,它可以是抽象类或接口。适配者(Adaptee)类:它是被访问和...原创 2020-02-28 11:35:31 · 157 阅读 · 0 评论 -
每日学习一个设计模式--代理模式
代理模式定义由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介结构与实现结构抽象主题(Subject)类:通过接口或抽象类声明真实主题和代理对象实现的业务方法。真实主题(Real Subject)类:实现了抽象主题中的具体业务,是代理对象所代表的真实对象,是最终要引用的对象。代理(P...原创 2020-02-23 16:59:55 · 153 阅读 · 0 评论 -
每日学习一个设计模式--建造者模式
建造者模式定义指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不变相分离,即产品的组成部分是不变的,但每一部分是可以灵活选择的。结构产品角色(Product):它是包含多个组成部件的复杂对象,由具体建造者来创建其各个滅部件指挥者(Director):它...原创 2020-02-19 13:45:32 · 155 阅读 · 0 评论 -
每日学习一个设计模式--简单工厂、工厂方法和抽象工厂模式
简单工厂、工厂方法、抽象工厂简单工厂:一个工厂类,一个抽象产品;缺点:添加新功能时,违反开闭原则;工厂方法:一个抽象工厂、一个抽象产品;一个工厂生产一种产品;遵循开闭原则;抽象工厂:一个抽象工厂、多个抽象产品;一个工厂生产一系列产品簇;简单工厂定义简单工厂模式属于创建型模式又叫做静态工厂方法模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模...原创 2020-02-18 22:12:56 · 189 阅读 · 0 评论 -
每日学习一个设计模式--设计模式总纲
设计模式总纲设计模式有两种分类方法,即根据模式的目的来分和根据模式的作用的范围来分。设计模式的优点做到低耦合,高内聚针对适用的应用场景,提供解决方案根据目的来分创建型模式:用于描述“怎样创建对象”,它的主要特点是“将对象的创建与使用分离”。结构型模式:用于描述如何将类或对象按某种布局组成更大的结构。行为型模式:用于描述类或对象之间怎样相互协作共同完成单个对象都无法单独完...原创 2019-12-17 10:33:59 · 171 阅读 · 0 评论 -
每日学习一个设计模式--观察者模式(发布-订阅模式)
定义观察者(Observer)模式的定义:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式,它是对象行为型模式。模式的结构抽象主题(Subject)角色:也叫抽象目标类,它提供了一个用于保存观察者对象的聚集类和增加、删除观察者对象的方法,以及通知所有观察者的抽象方法具体主题(Con...原创 2019-12-03 10:45:19 · 313 阅读 · 0 评论 -
每日学习一个设计模式--责任链模式
定义责任链(Chain of Responsibility)模式的定义:为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。特点在责任链模式中,客户只需要将请求发送到责任链上即可,无须关心请求的处理细节和请求的传递过程,所以责任链将请求的发送者和请求的处理者解耦了。...原创 2019-11-29 13:51:32 · 134 阅读 · 1 评论 -
每日学习一个设计模式--面向对象设计原则
开放-关闭原则参考:http://c.biancheng.net/view/1322.html定义开闭原则(Open Closed Principle,OCP)由勃兰特·梅耶(Bertrand Meyer)提出,他在 1988 年的著作《面向对象软件构造》(Object Oriented Software Construction)中提出:软件实体应当对扩展开放,对修改关闭(Softwa...原创 2019-11-29 11:04:18 · 169 阅读 · 0 评论 -
每日学习一个设计模式--模板方法模式
模板方法模式定义定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。它是一种类行为型模式特点提高代码复用性,将相同部分的代码放在抽象的父类中,而将不同的代码放入不同的子类中实现了反向控制,正确使用“钩子方法”可以使得子类控制父类的行为模式的结构抽象类:负责给出一个算法的轮廓和骨架。它由一个模板方法和若干个...原创 2019-11-27 22:34:51 · 229 阅读 · 0 评论 -
力学笃行系列之Spring和JDK设计中用到的设计模式
设计模式常用设计模式单例模式简单工厂工厂方法和抽象工厂代理模式命令模式策略模式门面模式桥接模式观察者模式工厂方法模式和抽象工厂模式有什么区别?工厂方法模式: 只有一个抽象产品类,具体工厂类只能创建一个具体产品类的实例抽象工厂模式: 有多个抽象产品类 ,具体工厂类能创建多个具体产品类的实例Spring中用到了那些设计模式简单工厂模式工厂方法单例模式代理模...原创 2019-09-28 10:06:50 · 484 阅读 · 0 评论