设计模式
谈胖胖
神一样的存在
展开
-
设计模式-建造者模式
定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。角色:产品类:一般是一个较为复杂的对象,也就是说创建对象的过程比较复杂,一般会有比较多的代码量。在本类图中,产品类是一个具体的类,而非抽象类。实际编程中,产品类可以是由一个抽象类与它的不同实现组成,也可以是由多个抽象类与他们的实现组成。 抽象建造者:引入抽象建造者的目的,是为了将建造的具体过程交与它的子类...原创 2019-04-03 22:11:19 · 2325 阅读 · 1 评论 -
设计模式-组合模式
组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。如公司、子公司以及部门的例子,以及文件系统和书的目录等等,生活中的例子很多。组合模式的结构组合模式中的主要角色:组合部件(Component):它是一个抽象角色...原创 2019-03-27 09:29:39 · 2534 阅读 · 2 评论 -
设计模式-责任链模式
定义责任链模式:避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。在责任链模式里,很多的对象由每一个对象对其下家的引用而联接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织链和分...原创 2019-04-05 14:55:33 · 2255 阅读 · 1 评论 -
设计模式-迭代子模式
定义迭代子模式可以顺序地访问一个聚集中的元素而不必暴露聚集的内部表象。我们常见的集合有很多种类,其顶层数据存储和组织方式的不同导致了我们在对数据进行遍历的时候存在一些差异,迭代器模式就是通过实现某种统一的方式来实现对不同的集合的遍历,同时又不暴露出其底层的数据存储和组织方式。结构:迭代器角色(Iterator): 负责定义访问和遍历元素的接口。 具体迭代器角色(Concrete It...原创 2019-04-05 15:22:04 · 2246 阅读 · 1 评论 -
设计模式-命令模式
定义:命令模式是一个高内聚的模式,将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录日志,可以提供命令的撤销和恢复功能。命令模式的核心在于引入了命令类,通过命令类来降低发送者和接收者的耦合度,请求发送者只需指定一个命令对象,再通过命令对象来调用请求接收者的处理方法。命令模式的结构:命令模式包含如下角色:Receiver接收者角色 命令接收者模式,命...原创 2019-04-05 16:59:24 · 3438 阅读 · 0 评论 -
设计模式-中介者模式
定义:用一个中介者对象来封装一系列的对象交互。中介者使得各对象不需要显式地相互引用,从而使其松散耦合,而且可以独立地改变它们之间的交互。角色:中介者模式有如下角色:Mediator 中介者定义一个接口用于与各同事(Colleague)对象通信。 ConcreteMediator 具体中介者通过协调各同事对象实现协作行为,了解并维护它的各个同事。 Colleague 抽...原创 2019-04-05 17:05:01 · 3809 阅读 · 0 评论 -
设计模式-单例模式
一、单例模式定义:单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避...原创 2019-04-05 21:00:47 · 3886 阅读 · 0 评论 -
设计模式-工厂模式
定义:工厂模式包括:简单工厂,工厂方法,抽象工厂三种。本文介绍前两种。目的:松耦合,不针对具体类。 作用:减少应用程序与具体类的依赖,实现松耦合。针对抽象编程,不针对具体类编程。1.简单工厂模式简单工厂模式的工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的对象实例。不修改代码的话,是无法扩展的。通常,我们利用简单工厂模式来进行类的创建。例如,获取线程池对象,就是通过简单...原创 2019-04-02 10:10:55 · 2407 阅读 · 1 评论 -
设计模式-抽象工厂
定义:提供一个接口,用于创建相关或者依赖对象的家族,而不需要明确指定具体类。允许客户使用抽象的接口来创建一组相关产品,不需要知道生产出来的是什么,客户从具体的产品中被解耦。组成:角色:抽象产品:抽象产品是(许多)不同产品抽象出来的。Product可以是接口或者抽象类。 具体产品:工厂中返回的产品对象,实际上是通过ConcreteProduct来创建的。 工厂实体:提供了对...原创 2019-04-02 22:04:17 · 2727 阅读 · 1 评论 -
设计模式-装饰器模式
定义:装饰模式可以动态的给一个对象增加一些额外的功能(增强功能) 相比于继承,装饰模式能对不支持继承的类进行增强;并且比继承更灵活,不需要生成大量的子类。角色:Component抽象构件角色:真实对象和装饰对象有相同的接口。这样,客户端对象就能够以与真实对象相同的方式同装饰对象交互。 ConcreteComponent具体构件角色:定义一个具体的对象,也可以给这个对象添加一些职责。...原创 2019-04-02 22:08:19 · 2510 阅读 · 1 评论 -
设计模式-线程池模式
定义:Worker Thread,一般都称为线程池。该模式事先启动一定数目的工作线程。当没有请求工作的时候,所有的工人线程都会等待新的请求过来,一旦有工作到达,就马上从线程池中唤醒某个线程来执行任务,执行完毕后继续在线程池中等待任务池的工作请求的到达。任务池:主要是存储接受请求的集合,利用它可以缓冲接受到的请求,可以设置大小来表示同时能够接受最大请求数目。这个任务池主要是供线程池来访...原创 2019-04-03 08:27:01 · 4968 阅读 · 1 评论 -
设计模式-代理模式
定义:代理模式为其他对象提供一种代理以控制对这个对象的访问。从定义可以知道代理模式控制客户端对一个对象的访问,它跟现实中的中介代理类似,只是作为代表做一些受理工作,真正执行的并不是它自己。结构:角色:抽象主题 Subject:声明了目标对象和代理对象的共同接口,任何可以使用目标对象的地方都可以使用代理对象。 具体主题 RealSubject:也称为委托角色或者被代理角色。定义...原创 2019-04-03 08:39:28 · 2210 阅读 · 1 评论 -
设计模式-桥接模式
桥接模式,基于类的最小设计原则,通过使用封装、聚合及继承等行为让不同的类承担不同的职责。它的主要特点是把抽象(Abstraction)与行为实现(Implementation)分离开来,从而可以保持各部分的独立性以及应对他们的功能扩展。桥接模式的结构:角色和职责:Client 调用端:这是Bridge模式的调用者。 抽象类(Abstraction):抽象类接口(接口这货抽象类)维护队...原创 2019-03-27 09:16:11 · 2231 阅读 · 2 评论 -
设计模式总览
设计模式分类创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 其他两类:并发型模式和线程池模式。设计模式的六...原创 2019-03-27 08:29:21 · 2598 阅读 · 3 评论 -
设计模式-备忘录模式
定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。角色对象:发起者对象Originator:负责创建一个备忘录来记录当前对象的内部状态,并可使用备忘录恢复内部状态。 备忘录对象Memento:负责存储发起者对象的内部状态,并防止其他对象访问备忘录。 管理者对象Caretaker:负责备忘录权限管理,不能对备忘...原创 2019-04-03 22:15:56 · 3126 阅读 · 2 评论 -
设计模式-原型模式
定义:原型模式(Prototype),使用原型实例指定待创建对象的类型,并且通过复制这个原型来创建新的对象。Java提供了Cloneable接口来标识运行克隆的对象。这个接口是一个标记接口,因此不包含任何的方法声明。当在类中实现时,Cloneable标识类的对象能够被克隆。为了执行克隆,你需要调用Object类的这个protected clone()方法,通过一个调用super.clone...原创 2019-03-30 08:25:44 · 2654 阅读 · 3 评论 -
设计模式-状态模式
定义:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。包含如下的角色:Context:定义客户感兴趣的接口。维护一个ConcreteState子类的实例,这个实例定义当前状态。 State:定义一个接口以封装与Context的一个特定状态相关的行为。 Co...原创 2019-03-30 08:30:55 · 2118 阅读 · 2 评论 -
设计模式-外观模式
定义:外观模式通过外观的包装,使复杂的系统对外只能看到外观对象,而不会看到具体的细节对象,为子系统中的一组接口提供了一个统一的访问接口,这个接口使得子系统更容易被访问或者使用。 这样无疑会降低应用程序的复杂度,并且提高了程序的可维护性。角色:外观角色(Facade):是核心,他被客户client角色调用,知道各个子系统的功能。同时根据客户角色已有的需求预订了几种功能组合。 子系统...原创 2019-04-04 08:25:11 · 2902 阅读 · 3 评论 -
设计模式-模板方法模式
定义:模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。角色:抽象模板(Abstract Template)角色。实现了模板方法,定义了算法的骨架。定义了一个或多个抽象操作,以便让子类实现。这些抽...原创 2019-04-04 08:49:58 · 2676 阅读 · 2 评论 -
设计模式-访问者模式
定义:封装一些作用于某种数据结构中的各元素的操作,它可以在不改变这个数据结构的前提下定义作用于这些元素的新的操作。结构:访问者模式结构中包含以下5个角色:Visitor(抽象访问者):抽象访问者为对象结构中每一个具体元素类ConcreteElement声明一个访问操作,从这个操作的名称或参数类型可以清楚知道需要访问的具体元素的类型,具体访问者则需要实现这些操作方法,定义对这些元素的...原创 2019-04-04 09:11:54 · 2184 阅读 · 1 评论 -
设计模式-享元模式
定义:采用一个共享来避免大量拥有相同内容对象的开销。这种开销中最常见、直观的就是内存的损耗。享元模式以共享的方式高效的支持大量的细粒度对象。享元模式是为数不多的、只为提升系统性能而生的设计模式。它的主要作用就是复用大对象(重量级对象),以节省内存空间和对象创建时间。角色:Flyweight(抽象享元类):通常是一个接口或抽象类,在抽象享元类中声明了具体享元类公共的方法,这些方法可以向外...原创 2019-04-04 09:15:56 · 2437 阅读 · 1 评论 -
设计模式-观察者模式
定义:观察者模式又称为发布/订阅模式,是一种对象的行为型模式。它定义了对象之间的一对多的依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象都得到通知并被自动更新。观察者模式的优点在于实现了表示层和数据层的分离,并定义了稳定的更新消息传递机制,类别清晰,抽象了更新接口,使得相同的数据层可以有各种不同的表示层。角色:主题(Subject):主题是一个接口,该接口规定了具体主题需要实现...原创 2019-04-04 09:22:43 · 3018 阅读 · 1 评论 -
设计模式-解释器模式
定义:给定一种语言,定义他的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中句子。角色:AbstractExpression:抽象解释器 声明一个抽象的解释操作,这个接口为抽象语法树中所有的节点所共享。 TerminalExpression:终结解释器 实现与文法中的终结符相关联的解释操作。一个句子中的每一个终结符需要该类的一个实例。 Nontermina...原创 2019-04-04 09:33:30 · 2896 阅读 · 1 评论 -
设计模式-策略模式
定义:策略模式是对算法的封装,把一系列的算法分别封装到对应的类中,并且这些类实现相同的接口,相互之间可以替换。在策略模式中,调用算法的主体则是封装到了封装类Context中,抽象策略Strategy一般是一个接口,目的只是为了定义规范,里面一般不包含逻辑。其实,这只是通用实现,而在实际编程中,因为各个具体策略实现类之间难免存在一些相同的逻辑,为了避免重复的代码,我们常常使用抽象类来担任Stra...原创 2019-04-04 09:39:13 · 1584 阅读 · 2 评论 -
设计模式-适配器模式
定义:适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是兼容性,让原本因接口不匹配的两个类可以协同工作,其别名为包装器(Wrapper)。适配器分为三类:类适配器,对象的适配器,接口的适配器结构:目标角色(Target):— 定义Client使用的与特定领域相关的接口。 客户角色(Client):与符合Target接口的对象协同。 被适配角色(Adaptee):定...原创 2019-03-30 21:49:21 · 2487 阅读 · 1 评论 -
Spring中用到的设计模式
第一种:简单工厂又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获得bean对象,但是否是在传入参数后创建还是传入参数前创建这个要根据具体情况来定。如下配置,就是在 ...原创 2019-04-16 09:21:44 · 2336 阅读 · 2 评论