设计模式
文章平均质量分 88
二十三种设计模式
情何以堪_123
这个作者很懒,什么都没留下…
展开
-
【设计模式】 设计模式基本概念
封装(Encapsulation)不需要知道对象具体实现细节,通过共有方法暴露对象的功能继承(Inheritance)使用已经存在的类作为基础类(父类),在此基础上建立新类(子类), 子类既可以复用父类的功能,也能进行扩展,从而提高了代码的复用。 另外,Java不像C++一样可以同时继承多个父类,只能够树形的继承,比如: Animal -> Person -> Man,或者通过 接口和...原创 2018-03-15 19:45:27 · 209 阅读 · 0 评论 -
Java设计模式——行为模式——迭代器模式(ITWEATOR)
迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。抽象迭代器(Iterator)角色:一般定义为接口,用来定义访问和遍历元素的接口。具体迭代器(ConcreteIterator)角色:实现对聚合对象的遍历,并跟踪遍历时的当前位置。抽象聚合(Aggregate)角色:定义创建相应迭代器对象的接口。具体聚合(ConcreteAggregate)角...原创 2018-04-25 21:23:18 · 223 阅读 · 0 评论 -
Java设计模式——行为模式——中介者模式(MEDIATOR)
中介者模式的定义用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互。中介者模式的优点适当地使用中介者模式可以避免同事类之间的过度耦合,使得各同事类之间可以相对独立地使用。使用中介者模式可以将对象间一对多的关联转变为一对一的关联,使对象间的关系易于理解和维护。使用中介者模式可以将对象的行为和协作进行抽象,能够比较灵活的处理对象间...原创 2018-04-26 10:09:04 · 420 阅读 · 0 评论 -
Java设计模式——行为模式——备忘录模式(MEMENTO)
备忘录模式在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外的保存 这个状态。三个角色:Originator:发起人,创建一个备忘录,可以记录,恢复自身的内部状态,还可根据 需求决定存储那些内部状态。Memento:备忘录,存储发起人角色的内部状态,并防止外部对象访问备忘录。Caretaker:管理者,存储备忘录,不能对备忘录内容进行访问,只能将其传递 给其他对象。UML类图使用场景保...原创 2018-04-26 13:01:56 · 195 阅读 · 0 评论 -
Java设计模式——行为模式——观察者模式(OBSERVER)
观察者模式概念在对象之间定义了一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象会收到通知并自动更新。抽象被观察者角色(Subject):也就是一个抽象主题,它把所有对观察者对象的引用保存在一个集合中,每个主题都可以有任意数量的观察者。抽象主题提供一个接口,可以增加和删除观察者角色。一般用一个抽象类和接口来实现。抽象观察者角色(Observer):为所有的具体观察者定义一个接口,在得到主题通...原创 2018-04-26 16:47:29 · 181 阅读 · 0 评论 -
Java设计模式——行为模式——状态模式(STATE)
状态模式定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类uml Context:上下文环境,定义客户感兴趣的接口,维护一个State子类的实例,该实例定义了对象的当前状态State:抽象状态,定义一个接口以封装与 Context 的一个特定状态相关的行为。Co...原创 2018-04-26 20:25:39 · 206 阅读 · 0 评论 -
Java设计模式——行为模式——策略模式(STRATEGY)
策略模式概念其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。策略模式的结构 策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。用一句话来说,就是:“准备一组算法,并将每一个算法封装起来,...原创 2018-04-26 20:41:26 · 178 阅读 · 0 评论 -
Java设计模式——行为模式——模板方法模式(TEMPLATE METHOD)
模板方法模式概念 模板方法模式属于行为型模式,它定义一个操作中的算法的骨架,而将一些步骤推迟到子类当中实现。父类抽取并实现的是公共方法,对于可变方法,父类做的只是定义了可变行为的接口,具体实现留给子类去完成,实现对代码的重复利用。模式中的角色 抽象类(AbstractClass):实现了模板方法,定义了算法的骨架。 具体类(ConcreteClass):实现抽象类中的抽象方法,已完成完整的算...原创 2018-04-27 17:08:34 · 277 阅读 · 0 评论 -
Java设计模式——对象行为模式——访问者模式(VISITOR)
定义封装一些作用域某种数据结构中的个元素的操作,在不改变这个数据结构的 前提下,定义作用于这些元素的新的操作。一、概述 访问者模式是一种较为复杂的行为型设计模式,它包含访问者和被访问元素两个主要组成部分,这些被访问的元素通常具有不同的类型,且不同的访问者可以对它们进行不同的访问操作。在使用访问者模式时,被访问元素通常不是单独存在的,它们存储在一个集合中,这个集合被称为“对象结构”,访问者通过...原创 2018-04-27 21:00:36 · 224 阅读 · 0 评论 -
Java设计模式——行为模式——职责链模式(Chain of Responsibility)
责任链模式:将能够处理同一类请求的对象连成一条链,使这些对象都有机会处理请求,所提交的请求沿着链传递。从而避免请求的发送者和接受者之间的耦合关系。链上的对象逐个判断是否有能力处理该请求,如果能则就处理,如果不能,则传给链上的下一个对象。直到有一个对象处理它为止。特点 1)被观察者需要持有一个或者多个观察者对象。 2)系统中一个模块的变化,某些模块也会跟随着变化。UML在责任链模式中,作为请求接...原创 2018-04-25 16:32:23 · 187 阅读 · 0 评论 -
Java设计模式——行为模式——命令模式(COMMAND)
命令模式:通过封装一组完全不相关的对象相互之间的的交互及通讯来完成松耦合。允许某一个对象的行为的变化是独立于其他对象的。优点1.降低对象之间的耦合度。2.新的命令可以很容易地加入到系统中。3.可以比较容易地设计一个组合命令。4.调用同一方法实现不同的功能缺点使用命令模式可能会导致某些系统有过多的具体命令类。因为针对每一个命令都需要设计一个具体命令类,因此某些系统可能需要大量具体命令类,这将影响命令...原创 2018-04-25 18:21:55 · 192 阅读 · 0 评论 -
Java设计模式——结构型模式——装饰器模式(DECORATOR)
装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。设计原则要使用装饰者模式,需要满足以下设计原则: 1、多用组合,少用继承 2、开放-关闭原则:类应该对拓展开放,对修改关闭UML类图由上自下...原创 2018-04-17 16:38:07 · 323 阅读 · 0 评论 -
Java设计模式——结构型模式——外观模式(FACADE)
外观模式: 又称门面模式: 他隐藏了系统的复杂性,并向客户端提供了一个可以访问系统的接口。为子系统中的一组接口提供了一个统一的访问接口,这个接口使得子系统更容易被访问或者使用。 (1) Facade(外观角色):在客户端可以调用它的方法,在外观角色中可以知道相关的(一个或者多个)子系统的功能和责任;在正常情况下,它将所有从客户端发来的请求委派到相应的子系统去,传递给相应的子系统对象处理。...原创 2018-04-17 17:08:13 · 234 阅读 · 0 评论 -
Java设计模式——结构型模式——享元模式(FLYWEIGHT)
享元模式(Flyweight Pattern),又称轻量级模式(这也是其英文名为FlyWeight的原因),通过共享技术有效地实现了大量细粒度对象的复用。也就是说在一个系统中如果有多个相同的对象,那么只共享一份就可以了,不必每个都去实例化一个对象。在了解享元模式之前我们先要了解两个概念:内部状态、外部状态。 内部状态:在享元对象内部不随外界环境改变而改变的共享部分。 外部状态:...原创 2018-04-17 17:43:13 · 130 阅读 · 0 评论 -
Java设计模式——结构型模式——代理模式(PROXY)
代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。代理模式: 人如其名,代理相信大家都可以经常看到什么什么代理,现实中代理太多了。感受最真实的是火车票的代理,经常可以在街上看到,你买票的是在代理商买的,但是付的钱依然会交给铁大哥,这就是代理。现实中的你可能会接触的例子就是叫同学...原创 2018-04-17 18:07:13 · 156 阅读 · 0 评论 -
Java设计模式——结构性模式——适配器模式(ADAPTER)
适配器模式(Adapter)把一个类的接口变换成客户端所期待的另一种接口,从而 使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。两种适配器模式:根据适配器类与适配者类的关系不同,适配器模式可分为 类适配器 和 对象适配器两种,类适配器模式通过重继承对一个接口与另一个接口进行匹配,而对象适 配器则是 引用 关系。类适配器类适配器的三个角色:目标接口(Target):客户所期待的接口,目标是...原创 2018-04-04 21:53:15 · 183 阅读 · 0 评论 -
Java设计模式——结构型模式——桥接模式(BRIDGE)
桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模式。UML图抽象化(Abstraction)角色:抽象化给出的定义,并保存一个对实现化对象的引用。修正抽象化(Refined Abstraction)角色:扩展抽象化角色,改变和修正父类对抽象化的定义。...原创 2018-04-05 13:53:33 · 252 阅读 · 0 评论 -
Java设计模式——结构性模式——组合模式(COMPSITE)
组合模式,又称为 部分整体模式,把具有相似的一组对象 当做一个对象处理,用一种树状的结构来组合对象,再提供统一 的方法去访问相似的对象,以此忽略掉对象与对象容器间的差别。组合模式允许你将对象组合成树形结构来表现”部分-整体“的层次结构,使得客户以一致的方式处理单个对象以及对象的组合。组合模式实现的最关键的地方是——简单对象和复合对象必须实现相同的接口。这就是组合模式能够将组合对象和简单对象进行一致...原创 2018-04-05 14:19:29 · 1587 阅读 · 2 评论 -
Java设计模式——创建型模式——单例模式(SINGLETON)
意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例多个对象。一个最好的办法就是让类自身负责保存它的唯一实例。这个类可以保证没有其他实例被创建,并且它可以提供一个访问该实例的办法 单例模式(singleton)结构图 ...原创 2018-03-13 18:57:34 · 234 阅读 · 0 评论 -
Java设计模式——创建型模式——抽象工厂模式(Abstract Factory Pattern)
抽象工厂模式算是工厂相关模式的终极形态,如果完全理解了上一章的工厂方法模式,那么抽象工厂模式就很好理解了。它与工厂方法唯一的区别就是工厂的接口里是一系列创造抽象产品的方法,而不再是一个,而相应的,抽象产品也不再是一个了,而是一系列相关的产品。这其实是工厂方法模式的一种扩展。通常用继承和组合两种方式扩展一个接口或者类,一般我们推荐使用组合扩展一个现有的类或接口,但这并非绝对,如果你扩展的子类或子接口...原创 2018-03-21 21:00:13 · 330 阅读 · 0 评论 -
Java设计模式——创建型模式——工厂方法模式(Factory METHOD Pattern)
工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。工厂方法模式的代码 /** * 产品的抽象接口...原创 2018-03-26 21:19:34 · 251 阅读 · 0 评论 -
Java设计模式——创建型模式——建造者模式(Builder Pattern)
建造者模式,顾名思义的就是类似建房子,有一个固定的流程。在大话设计模式中,作者举了一个例子大概意思是同一道菜在中国的每一个地方都有不同的味道(LZ印象最深的是鱼香肉丝,来北方最之后印象最深的是宫保鸡丁。哈哈),而肯德基的鸡腿、汉堡在每一个城市都是一样的味道。我觉的这一个例子可以清楚的认识到建造者模式有一个固定的建造过程。建造者模式实现了依赖倒转原则,抽象不应该依赖细节,细节应该依赖与抽象。建造者模...原创 2018-03-31 18:57:23 · 238 阅读 · 0 评论 -
Java设计模式——创建型模式——原型模式(Prototype Pattern)
原型模式概念原型模式(Prototype Pattern):与工厂模式类似,都是用来创建对象的。利用克隆来生成一个大对象,减少创建时的初始化等操作占用开销原型模式属于对象的创建模式,通过给出一个原型对象来指明要创建对象的类型,然后用复制这个原型对象的办法来创建出更多的同类型的对象。就是给你一个现有的对象,你要得到和这个对象同类型的新对象,就将这个对象复制一下,就可以得到了。 该模式的思想就是将一...原创 2018-03-31 20:47:39 · 297 阅读 · 0 评论