设计模式
文章平均质量分 82
张自强
关注互联网及其移动相关领域
展开
-
Java中的23种设计模式
Java中的23种设计模式1、工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客户端提供。 2、建造模式:将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成原创 2008-10-17 10:28:00 · 477 阅读 · 0 评论 -
JAVA设计模式学习11——适配器模式
适配器(adapter)模式,把一个类的接口变成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。适配器模式有两种形式,类的适配器模式和对象的适配器模式。我们先看类的适配器模式,类的适配器模式有以下角色:目标(Target)角色:是期待得到的接口类型。这里谈类的适配器模式所以这个不能是类,原因是java单继承。源(adaptee)角色:现有待适...2013-07-21 20:10:24 · 114 阅读 · 0 评论 -
JAVA设计模式学习12——装饰器模式
装饰(Decorator)模式属于设计模式里的结构模式,通过装饰类动态的给一个对象添加一些额外的职责。装饰模式也叫包装(wrapper)模式。装饰模式有如下的角色:抽象构件(component)角色:这个角色用来规范被装饰的对象,一般用接口方式给出。具体构件(concrete component)角色:被装饰的类。装饰(decorator)角色:持有一个构件对象的实例。并定义一个跟...2013-07-23 06:41:37 · 155 阅读 · 0 评论 -
JAVA设计模式学习13——代理模式
代理(proxy)模式:指目标对象给定代理对象,并由代理对象代替真实对象控制客户端对真实对象的访问。代理模式模式有以下角色:抽象主题(subject)角色:声明真实主题和代理主题的共同接口。真实主题(real subject)角色:定义代理对象需要代理的真实对象。代理主题(proxy subject)角色:代替真实对象来控制对真实对象的访问,代理对象持有真实对象的应用,从而可以...2013-07-25 06:53:04 · 118 阅读 · 0 评论 -
JAVA设计模式学习14——享元模式
享元(Flyweight)模式:通过共享技术以便有效的支持大量细粒度的对象。享元模式在阎宏的《java与模式》中分为单纯享元模式和复合享元模式,复合模式的复合享元是不可以共享的,享元对象能做到共享的关键是区分内蕴态(Internal State)和外蕴态( External State)。这两个“蕴态”翻译的太难懂,我不是说翻译的不好,可能是我理解能力差,还是《Design Pattern...2013-07-28 06:37:56 · 134 阅读 · 0 评论 -
JAVA设计模式学习15——门面模式
门面(Facade)模式(也叫外观模式),为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。如下图表示: 从上图可以看出门面模式是把复杂的业务封装到了子系统内部,而对外部来说只有一个统一的访问界面,使得子系统更加简单,容易被客户端使用。门面模式的体现的是面向对象设计里面的迪米特法则(Law of Demeter)简称LoD,讲的是一...2013-07-31 07:38:08 · 127 阅读 · 0 评论 -
JAVA设计模式学习16——桥梁模式
桥梁(Bridge)模式:又称Handle/Body。将抽象部分和实现部分分离,使它们都可以独立的变化。桥梁模式属于对象的结构模式。GOF桥梁模式的示意性结构类图如下:通过上图可以看出桥梁模式有以下角色:抽象化(Abstraction)角色:给出抽象化定义并持有一个实现化对象的引用。修正抽象化(Refined Abstraction)角色:扩展抽象化角色,改变和修正父类对抽象...2013-08-03 10:15:32 · 143 阅读 · 0 评论 -
JAVA设计模式学习17——策略模式
策略(Strategy)模式:又名Policy,它的用意是定义一组算法,把它们一个个封装起来,并且使他们可以相互替换。策略模式可以独立于使用他们的客户端而变化。GOF策略模式静态结构类图如下:通过上图可以看出策略模式有以下角色构成:1、抽象策略(Strategy)角色:抽象策略角色由抽象类或接口来承担,它给出具体策略角色需要实现的接口;2、具体策略(ConcreteStrategy...2013-08-06 08:07:10 · 127 阅读 · 0 评论 -
JAVA设计模式学习18——模版方法模式
模版方法(Template Method)模式:属于类的行为模式,它的用意是定义一个操作中的算法的骨架,将一些操作延迟到子类中。使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。模版方法模式的类图如下:模版方法模式有两个角色:1、抽象模版(Abstract Template)角色:定义了一个或多个抽象操作,同时定义了一个模版方法,它是一个具体的方法,作为抽...2013-08-10 07:42:43 · 120 阅读 · 0 评论 -
JAVA设计模式学习19——观察者模式
观察者(Observer)模式:是对象的行为模式,又叫做发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听(Source/Listener)模式或者从属(Dependents)模式。观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。...2013-08-13 21:46:55 · 173 阅读 · 0 评论 -
JAVA设计模式学习20——责任链模式
责任链(Chain of Responsibility)模式:责任链模式是对象的行为模式。使多个对象都有机会处理请求,从而避免请求的发送者和接受者直接的耦合关系。将这些对象连成一条链,沿着这条链传递该请求,直到有一个对象处理它为止。责任链模式强调的是每一个对象及其对下家的引用来组成一条链,利用这种方式将发送者和接收者解耦,类图如下:通过上图可以看出责任链模式有两个角色:抽象处理者...2013-08-17 14:10:36 · 145 阅读 · 0 评论 -
JAVA设计模式学习21——命令模式
命令(Command)模式:又称Action模式或者Transaction模式。它属于对象的行为模式。命令模式把一个请求或者操作封装到一个对象中。命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和撤销功能。GoF命令模式结构图如下: 命令模式是有以下角色:抽象命令(Command)角色:声明执行操作的接口。具体命令(Con...2013-08-21 08:01:00 · 144 阅读 · 0 评论 -
JAVA设计模式学习22——备忘录模式
备忘录(Memento)模式:又叫做快照模式(Snapshot Pattern)或Token模式,属于行为模式。在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。备忘录模式有如下结构图:备忘录模式涉及角色如下:发起人(Originator):负责创建一个备忘录Memento,用以记录当前时刻自身的内部状态...2013-08-26 21:57:34 · 145 阅读 · 0 评论 -
JAVA设计模式学习23——状态模式
状态(state)模式:状态模式的意图是,允许一个对象在其内部状改变时改变它的行为。看起来就像是改变了它的类一样。主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同的一系列类当中,可以把复杂的逻辑判断简单化。状态模式的结构如下图: 从图中可以看出状态模式有以下角色:1、抽象状态(State)角色:定义一个接口,用以封装环境对象的...2013-09-07 11:57:59 · 148 阅读 · 0 评论 -
JAVA设计模式学习24——访问者模式
访问者(Visitor)模式:封装一些作用于某种数据结构中的各元素的操作,它可以在不改变这个数据结构的前提下定义作用于这些元素的新的操作。访问者模式的结构图如下: 通过上图可以看到他有如下角色:抽象访问者(Visitor)角色:定义接口,声明一个或多个访问操作。 具体访问者(ConcreteVisitor)角色:实现抽象访问者所声明的接口,也就是抽象访问者所声明的各个访问操作。 抽象...2013-09-16 07:54:26 · 197 阅读 · 0 评论 -
JAVA设计模式学习10——组合模式
这节开始学习结构模式,结构模式包括:组合模式、门面模式、适配器模式、代理模式、装饰模式、桥模式、享元模式。从组合模式开始学习。组合模式(Composite)就是把部分和整体的关系用树形的结构来表示,从而使客户端能够把部分对象和组合起来的对象采用同样的方式来看待。树图结构一般包含一个根节点,若干个树枝和叶子节点。如下图:可以用一个类图描述树结构的静态结构,把根节点当做树枝节点来描述...2013-07-20 21:45:47 · 99 阅读 · 0 评论 -
JAVA设计模式学习9——原型模式
原型模式(prototype)它是指通过给定一个原型对象来指明所要创建的对象类型,然后复制这个原型对象的办法创建出同类型的对象。原型模式也属于创建模式。我们先来看一下原型模式的模型:原型模型涉及到三个角色:客户角色(client):客户端提出创建对象的请求;抽象原型(prototype):这个往往由接口或者抽象类来担任,给出具体原型类的接口;具体原型(Concrete ...2013-07-19 07:18:36 · 134 阅读 · 0 评论 -
设计模式之Bridge
板桥里人 http://www.jdon.com Bridge模式定义 : 将抽象和行为划分开来,各自独立,但能动态的结合。 任何事物对象都有抽象和行为之分,例如人,人是一种抽象,人分男人和女人等;人有行为,行为也有各种具体表现,所以,“人”与“人的行为”两个概念也反映了抽象和行为之分。 在面向对象设计的基本概念中,对象这个概念实际是由属性和行为两个部分组成的,属性我们可以认为是一种静止原创 2013-08-23 13:56:09 · 427 阅读 · 0 评论 -
UML建模
业务过程建模 介绍 比起业务分析与建模来,UML在过去与软件工程和系统设计的联系更加紧密。并且,UML2.X标准提供了丰富的行为模型,这对于过程、活动、及对每一个业务都重要的人与信息等的建模非常有用。 除标准的UML规范外,还有两个备受关注的UML扩展,它们进一步强化了对业务过程和相关结构的建模。第一个是业务过程建模标注,它已经广受欢迎,并迅速成为业务过程建模与设计的新标准。第二个是 Er原创 2013-08-23 13:56:14 · 781 阅读 · 0 评论 -
S.O.L.I.D 原则
由 Robert Martin提出的S.O.L.I.D 原则,用来更好编写面向对象程序,更灵活应对变化。 S - Single Responsibility Principle 单一职责,简称SRP 这个我前面几篇文章刚刚写:对象的责任与职责 如何从职责和协作中发现丰富对象? 比如:报表的内容和报表的格式都会变化改变,但是这两种变化的性质不同,一个是实质内在,一个是表面上的,SRP认为这是原创 2013-08-23 13:56:07 · 1802 阅读 · 0 评论 -
【引用】设计模式的UML图
1.抽象工厂(Abstract Factory)模式意图:为特定的客户(或情况)提供特定系列的对象。 2.类的适配器(Adapter)模式意图:将一个类的接口转换成客户希望的另外一个接口。 3.对象的适配器(Adapter)模式意图:将一个类的接口转换成客户希望的另外一个接口。 4.桥梁(Bridge)/柄体(Handle and Body)模式 意图:将抽象部分与它的实现部分分离,使它们都原创 2013-08-23 13:59:40 · 474 阅读 · 0 评论 -
UML建模工具比较
自从1997年正式发布UML以后,大量商用UML建模CASE工具粉墨登场。这样为我们提供了许多的选择,同时也要求我们在选择正确的UML建模工具以更好地适应我们业务和软件应用程序开发需求,达到最好的投资回报率(ROI)方面做大量的调查。在这篇文章中,我们将比较两款CASE工具的UML建模能力、双向工程特性和项目生命周期支持:Sparx Systems的Enterprise Architect(EA)原创 2013-08-23 13:56:12 · 999 阅读 · 5 评论 -
JAVA设计模式学习1——统一建模语言UML
今天开始重温设计模式,我想把自己学习的过程分享给大家,同时希望大家多多留言来讨论,相互学习相互进步。设计模式学习过程中需要借助UML来建模,把设计模式图形化,从而让我们更好的理解设计模式内容。什么是UML,UML是统一建模语言(Unified Modeling Language)的缩写,是当今软件设计的标准图标式设计语言。UML包括1、用例图(Use case diagrams),2、类图(C...原创 2012-11-10 14:58:57 · 135 阅读 · 0 评论 -
JAVA设计模式学习3——设计模式概述
上一节里提到设计模式分为创建模式,结构模式和行为模式,这节我们来学习它们的定义以及它们包含哪些具体的设计模式。一、创建模式创建模式是对类的实例化过程的抽象化。在一些系统里,可能需要动态的决定怎样创建对象,创建哪些对象,以及如何组合和表示这些对象。创建模式描述了怎么构造和封装这些动态的决定。创建模式分为类的创建模式和对象的创建模式两种。1、类的创建模式 类的创建模式使用继承关系,把类的创建延迟到...原创 2012-11-11 16:21:23 · 105 阅读 · 0 评论 -
JAVA设计模式学习2——面向对象设计原则
软件设计的核心是提高软件的可复用性和可维护性。通常一个软件之所以可复用性和可扩展性差的原因在于设计过于僵硬,过于脆弱,复用率低,粘度过高等原因导致的,这时候需要想办法提高可扩展性,灵活性和可插入性,从而提高软件的可复用性和可维护性。一般可维护性和可复用性不能同时能达到目的,只有遵循一定的设计原则,设计出来的系统才能同时满足可复用性和可维护性。面向对象设计原则主要有如下几条:1、“开闭”原则...原创 2012-11-11 16:21:34 · 117 阅读 · 0 评论 -
JAVA设计模式学习25——迭代器模式
迭代器 (Iterator)模式:迭代器模式提供一种方法顺序一个聚合对象中各个元素,而又不暴露该对象内部表示。迭代器模式由以下角色组成:迭代器角色(Iterator):迭代器角色负责定义访问和遍历元素的接口。具体迭代器角色(Concrete Iterator):具体迭代器角色要实现迭代器接口,并要记录遍历中的当前位置。容器角色(Container):容器角色负责提供创建具...2013-11-21 13:53:42 · 162 阅读 · 0 评论 -
JAVA设计模式学习4——简单工厂模式
从这节开始学习设计模式,首先学习创建模式,其中工厂模式是创建模式里面最常见也常用的一种,工厂模式又分简单工厂模式(Simple Factory),工厂方法模式(Factory Method)和抽象工厂模式(Abstractor Factory),这里先学习最简单的也就是简单工厂模式。简单工厂模式(Simple Factory)也称静态工厂方法模式,是工厂方法模式的特殊实现。简单工厂模式的...2013-07-17 19:58:37 · 180 阅读 · 0 评论 -
JAVA设计模式学习5——工厂方法模式
工厂方法模式(Factory Method)又称虚拟构造子模式,可以说是简单工厂的抽象,也可以理解为简单工厂是退化了的工厂方法模式,其表现在简单工厂丧失了工厂方法的多态性。我们前一节中提到当产品结构变的复杂的时候,简单工厂就变的难以应付,如果增加一种产品,核心工厂类必须改动,使得整个工厂的可扩展性变得很差,对开闭原则支持不够。工厂方法模式克服了这些缺点,它定义一个创建产品对象的工厂接口...2013-07-17 20:26:09 · 114 阅读 · 0 评论 -
JAVA设计模式学习6——抽象工厂模式
前面我们介绍了简单工厂,工厂方法模式,这节来看看抽象工厂模式,抽象工厂模式(Abstract Factory)是工厂方法里面最为抽象和最具一般性的形态,是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。抽象工厂模式和工厂方法模式的最大区别在于,工厂方法模式针对的是一个产品等级结构;而抽象工...2013-07-17 21:51:44 · 123 阅读 · 0 评论 -
JAVA设计模式学习7——单例模式
设计模式的创建模式中前面说了工厂模式,这里我们继续来讨论设计模式中另一个创建模式—单例模式。单例模式(Singleton)是指确保一个类有且仅有一个实例,而且自行实例化并向整个系统提供这个实例。这个类我们也称它为单例类。单例模式的使用在现实世界里很多,比如我们常见的打印机打印的作业队列,一个没打印完,那么只有在队列等待;windows回收站,windows视窗里回收站有且只有一个实例。单例模式...2013-07-18 07:31:07 · 131 阅读 · 0 评论 -
JAVA设计模式学习8——建造模式
建造模式(Builder)是对象的创建模式,建造模式可以将一个产品的内部表象与产品的生产过程分割开来,从而可以是建造过程生成具有不同内部表象的产品对象。一个产品常有不同的组成成分作为产品的零件,这些零件有可能是对象,也有可能不是对象,通常我们称作内部表象,不同的产品可以有不同的内部表象,也就是不同的零件。使用建造模式可以使客户端不需要知道所生成的产品有那些零件,每个产品对应的零件彼此有何不同,...2013-07-18 21:08:01 · 119 阅读 · 0 评论 -
设计模式汇总
JAVA设计模式学习1——统一建模语言UMLJAVA设计模式学习2——面向对象设计原则JAVA设计模式学习3——设计模式概述JAVA设计模式学习4——简单工厂模式JAVA设计模式学习5——工厂方法模式JAVA设计模式学习6——抽象工厂模式JAVA设计模式学习7——单例模式JAVA设计模式学习8——建造模式JAVA设计模式学习9——原型模式JAVA设计模式学习1...原创 2015-12-01 23:10:04 · 401 阅读 · 0 评论