设计模式
文章平均质量分 82
爱笑的余尔吖
这个作者很懒,什么都没留下…
展开
-
设计模式(9)——迭代器模式
迭代器一、 引言迭代这个名词对于熟悉Java的人来说绝对不陌生。我们常常使用JDK提供的迭代接口进行java Collection的遍历:[java] view plaincopyprint?List list = new ArrayList(); list.add("abc"); list.add("xyz"转载 2014-02-23 10:29:24 · 487 阅读 · 0 评论 -
设计模式——经典设计模式一览
一、模式(Pattern)定义我们处理大量问题时,在很多不同的问题中重复出现的一种性质,它使得我们可以使用一种方法来描述问题实质并用本质上相同,但细节永不会重复的方法去解决,这种性质就叫模式。一个围棋下得好的人知道,好的“形”对于围棋非常重要。形是棋子在棋盘上的几何形状的抽象化。形就是模式(Pattern),也是人脑把握和认识外界的关键。成为模式的条件1、它可以转载 2014-02-17 10:44:21 · 608 阅读 · 0 评论 -
设计模式——单一职责原则
单一职责原则【Single Responsibility Principle】1、单一职责原则单一职责原则:应该有且仅有一个原因引起类的变更There should never be more than one reason for a class to change.2、使用单一职责原则的好处1. 类的复杂性降低,实现什么职责都有清晰明确的定义;2. 可读转载 2014-02-17 11:11:54 · 503 阅读 · 0 评论 -
设计模式——里氏替换原则
里氏替换原则【Liskov Substitution Principle】1、定义第一个定义,最正宗的定义:If for each object o1 of type S there is an object o2 of type T suchthat for all programs P defined in terms of T, the behavior of P is unch转载 2014-02-17 11:13:32 · 494 阅读 · 0 评论 -
设计模式——依赖倒置原则
依赖倒置原则(Dependence Inversion Principle)原文地址一、 依赖倒置原则的定义依赖倒置原则(Dependence Inversion Principle,简称DIP)依赖倒置原则的原始定义是:Highlevelmodules should not depend upon low level modules. Both should转载 2014-02-17 11:16:47 · 796 阅读 · 0 评论 -
设计模式——接口隔离原则
接口隔离原则【Interface Segregation Principle】一、定义讲接口隔离原则,它有两种定义:第一种定义: Clients should not beforced to depend upon interfaces that they don't use.客户端不应该依赖它不需用的接口。第二种定义:The dependency of one转载 2014-02-17 11:20:05 · 569 阅读 · 0 评论 -
设计模式(7)——观察者模式
观察者模式原文地址一.概述 观察者(Observer)模式是对象的行为型模式,又叫做发表-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-收听者(Source/Listener)模式或从属者(Dependents)模式。观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,转载 2014-02-17 20:06:23 · 472 阅读 · 0 评论 -
设计模式(3)——简单工厂模式
简单工厂模式一、简单工厂模式 简单工厂模式(SimpleFactory Pattern)属于类的创新型模式,又叫静态工厂方法模式(StaticFactoryMethod Pattern),是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。简单工厂模式实质是由一个工厂类根据传入的参量,动态的决定应该创建出哪一个产品类的实例.简单工厂模式实际上不属转载 2014-02-17 19:59:45 · 525 阅读 · 0 评论 -
设计模式(5)——模板方法
模板方法原文地址1原文地址2一、模板方法模式的定义 模板方法模式(TemplateMethod Pattern)其定义如下: Define theskeleton of an algorithm in an operation, deferring some steps to subclasses.Template Method lets sub转载 2014-02-17 20:04:29 · 563 阅读 · 0 评论 -
设计模式(6)——适配器模式
一. 概述 将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。二. 解决的问题 即Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。三. 模式中的角色3.1目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。3.2转载 2014-02-17 20:05:26 · 463 阅读 · 0 评论 -
设计模式(2)——多例设计
既然程序中可以存在单例设计,那么就可以存在多例设计。[java] view plaincopyprint?class Color { private static final Color RED = new Color("红色") ; private static final Colo转载 2014-02-17 19:55:02 · 402 阅读 · 0 评论 -
设计模式(3)——抽象工厂模式
抽象工厂模式一、定义抽象工厂模式(Abstract Factory Pattern)是一种比较常用的模式,其定义如下:Provide an interface for creating families of related or dependentobjects without specifying their concrete classes。二、例子1:女娲造有肤色、转载 2014-02-17 20:01:58 · 696 阅读 · 0 评论 -
设计模式(8)——代理模式
原文地址:http://www.ibm.com/developerworks/cn/java/j-lo-proxy1/ 一、代理概念为某个对象提供一个代理,以控制对这个对象的访问。 代理类和委托类有共同的父类或父接口,这样在任何使用委托类对象的地方都可以用代理对象替代。代理类负责请求的预处理、过滤、将请求分派给委托类处理、以及委托类执行完请求后的后续处理。图1:代理模式转载 2014-02-17 20:10:30 · 490 阅读 · 0 评论 -
设计模式(1)——单例模式
一、单例设计 Singleton类中永远只会有一个实例化对象,此种代码实现的根本原理就是在于将一个类的构造方法关闭了。 当一个类中只能产生一个实例化对象的时候,就需要将构造方法封闭,封闭之后的操作通过一个静态方法取得本类的实例化对象。构造方法私有化本类的一个静态实例提供一个静态方法获得本类的实例化对象 如果要想继续划分的,实际上单转载 2014-02-17 19:53:32 · 488 阅读 · 0 评论 -
设计模式(3)——工厂方法模式
工厂方法模式一、定义Define an interface for creating an object, but letsubclasses decide which class to instantiate. Factory Method lets a class deferinstantiation to subclasses。定义一个用于创建对象的接口,让子类决定实例化转载 2014-02-17 19:57:20 · 575 阅读 · 0 评论 -
设计模式(4)——外观模式
Facade模式一、定义为子系统中的一组接口提供一个统一接口。Facade模式定义了一个更高层的接口,使子系统更加容易使用。二、例子1 大致意思是说:使用一种比原有方式更简单的办法与系统交互。例如,我们把一个很文件的文件,放在了第二抽屉里,而第二个抽屉的钥匙放在了第一个抽屉里,我们要想取出这个文件,第一步肯定要拿到第一个抽屉的钥匙,然后打开它再拿出第二个抽转载 2014-02-17 20:03:24 · 417 阅读 · 0 评论 -
设计模式——原则
设计模式原则1、开-闭原则(OCP Open Close Principle)面向对象可利用设计(OOD)的第一块基石,就是“开-闭原则(Open-Closed principle,简称OCP),它的核心含意是:一个好的设计应该能够容纳新的功能需求的增加,但是增加的方式不是通过修改已有的模块(类),而是通过增加新的模块(类)来完成的。2、单一职责原则(SRP Single Res转载 2014-02-17 10:37:49 · 433 阅读 · 0 评论 -
设计模式——开闭原则
开闭原则【Open Close Principle】一、定义Softwareentities like classes, modules and functions should be open for extension butclosed for modifications.一个软件实体应该对扩展开放,对修改关闭。二、什么是开闭原则开闭原则的定义已经非常明确告诉转载 2014-02-17 11:23:05 · 830 阅读 · 0 评论 -
设计模式——最少知识原则/迪米特法则
最少知识原则【Least Knowledge Principle,简称LKP】迪米特法则【Low Of Demeter】一、定义迪米特法则的简写为LoD。迪米特法则也叫做最少知识原则(Least Knowledge Principle,简称LKP)说的都是一会事,一个对象应该对其他对象有最少的了解,通俗的讲一个类对自己需要耦合或者调用的类应该知道的最少,你类内部是怎么复杂、转载 2014-02-17 11:21:56 · 864 阅读 · 0 评论 -
设计模式(10)——策略模式
策略模式一. 概述 它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化不会影响到使用算法的客户端。二. 模式解读2.1 策略模式的一般化类图2.2 模式中的角色2.1 策略类(Stratege):定义所有支持的算法的公共接口。2.2 具体策略类(Concrete Stratege):封装了具体的算法或行为,继承于Stra转载 2014-02-23 10:29:45 · 523 阅读 · 0 评论 -
设计模式(11)——建造者模式
建造者模式一、定义 建造者模式(Builder):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。二、模式解读: 类图 2.2.模式中的角色产品(Product):表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。转载 2014-02-23 10:30:04 · 424 阅读 · 0 评论 -
设计模式(12)——命令模式
命令模式一. 定义将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。二. 模式的引入(项目组开发为例)解决的问题在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤销或重做、事务等处理时,这种无法抵御变化的紧耦合的设计就不太合适。 项目的成员转载 2014-02-23 10:30:18 · 487 阅读 · 0 评论 -
设计模式(13)——Composite 组合模式
一、组合模式定义概述:将对象组合成树形结构以表示"部分-整体"的层次结构。"Composite"使得用户对单个对象和组合对象的使用具有一致性。二、适用场合:2.1当想表达对象的部分-整体的层次结构时(部门、菜单、树形结构)2.2 希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象时。三、模式解读3.1类图3.2组合模式中的角色转载 2014-02-23 10:30:38 · 533 阅读 · 0 评论 -
设计模式(14)——装饰者模式
装饰模式一、概述定义: 动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更灵活。原理:增加一个修饰类包裹原来的类,包裹的方式一般是通过在将原来的对象作为修饰类的构造函数的参数。装饰类实现新的功能,但是,在不需要用到新功能的地方,它可以直接调用原来的类中的方法。因为修饰类和原来的类有相同的接口。装饰模式以对客户端透明的方式动态的给一个对象附加上更多的转载 2014-02-23 10:32:03 · 533 阅读 · 0 评论 -
设计模式(15)——桥接模式
桥梁模式一、引子下面的一个例子,有助于理解Bridge模式的设计目的:设想要绘制一幅图画,蓝天、白云、绿树、小鸟,如果画面尺寸很大,那么用蜡笔绘制就会遇到点麻烦。毕竟细细的蜡笔要涂出一片蓝天,是有些麻烦。如果有可能,最好有套大号蜡笔,粗粗的蜡笔很快能涂抹完成。至于色彩吗,最好每种颜色来支粗的,除了蓝天还有绿地呢。这样,如果一套12种颜色的蜡笔,我们需要两套24支,同种颜色的一粗转载 2014-02-23 10:32:20 · 492 阅读 · 0 评论 -
设计模式(16)——中介者模式
中介者模式中介在现实生活中并不陌生,满大街的房屋中介、良莠不齐的出国中介……。它们的存在是因为它们能给我们的生活带来一些便利:租房、买房用不着各个小区里瞎转;出国留学也不用不知所措。中介者模式在程序设计中也起到了类似的作用.一、定义GOF给中介者模式下的定义是:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间转载 2014-02-23 10:32:35 · 815 阅读 · 0 评论 -
设计模式(17)——职责链模式
职责链模式一、定义 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条链。并沿着这条链传递该请求,直到有一个对象处理它为止。 责任链模式的重点在于”链”上,在责任链模式中,很多对象由每一个对象对其下家的引用而接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。客户并不知道链上的哪一个对象最终处理这个请求,转载 2014-02-23 10:32:59 · 492 阅读 · 0 评论 -
设计模式(18)——备忘录模式
备忘录模式一、模式定义在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样就可以将该对象恢复到原先保存前的状态。备忘录模式又叫做快照模式(Snapshot Pattern)或Token模式,属于行为模式。二、 结构组成部分:发起人(Originator):负责创建一个备忘录Memento,用以记录当前时刻自身的内部状态,并可转载 2014-02-23 10:33:14 · 563 阅读 · 0 评论 -
设计模式(19)——状态模式
状态模式一、定义状态( State )模式:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。二、适用性一个对象的行为取决于它的状态, 并且它必须在运行时刻根据状态改变它的行为。一个操作中含有庞大的多分支的条件语句,且这些分支依赖于该对象的状态。这个状态通常用一个或多个枚举常量表示。通常, 有多个操作包含这一相同的条件结构。State模式将每一个条件分转载 2014-02-23 10:33:31 · 605 阅读 · 0 评论 -
设计模式(20)——享元模式
享元模式一、定义GOF:运用共享技术有效地支持大量细粒度的对象。二、引入有些应用程序得益于在其整个设计过程中采用对象技术,但简单化的实现代价极大。使用面向对象的抽象化,可能会造成庞大的对象群,造成空间的巨大消耗,而影响性能。在文档编辑器例子中如果一个字符对应一个对象,那么一篇文档所要容纳的对象将是非常的庞大耗费大量的内存。而实际组成文档的字符转载 2014-02-23 10:34:35 · 461 阅读 · 0 评论 -
设计模式(21)——访问者模式
访问者模式一、引子 对于系统中一个已经完成的类层次结构,我们已经给它提供了满足需求的接口。但是面对新增加的需求,我们应该怎么做呢?如果这是为数不多的几次变动,而且你不用为了一个需求的调整而将整个类层次结构统统地修改一遍,那么直接在原有类层次结构上修改也许是个不错 的主意。 但是往往我们遇到的却是:这样的需求变动也许会不停的发生;更重要的是需求的任何变动可能都要让你将整个类层转载 2014-02-23 10:34:51 · 446 阅读 · 0 评论 -
设计模式(23)——访问者模式与双分派
一、java的动态绑定所谓的动态绑定就是指程执行期间(而不是在编译期间)判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。java继承体系中的覆盖就是动态绑定的,看一下如下的代码:[java] view plaincopyprint?class Father { public void method() {转载 2014-02-23 10:35:47 · 662 阅读 · 0 评论 -
设计模式(22)——解释器模式
解释器模式 一、定义:给定一种语言,定义他的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中句子。二、结构2.1、类图2.2、角色组成·抽象解释器:声明一个所有具体表达式都要实现的抽象接口(或者抽象类),接口中主要是一个interpret()方法,称为解释操作。具体解释任务由它的各个实现类来完成,具体的解释器分别由终结符解释器Term转载 2014-02-23 10:35:06 · 440 阅读 · 0 评论 -
设计模式——组合/聚合复用原则
合成/聚合复用原则 一、定义:合成/聚合复用原则(Composition/AggregationPrinciple CARP),尽量使用合成/聚合,不要使用类继承。即在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分,新对象通过向这些对象的委派达到复用已有功能的目的。就是说要尽量的使用合成和聚合,而不是继承关系达到复用的目的。二、引入:转载 2014-02-17 11:10:14 · 1594 阅读 · 0 评论 -
组合,聚合,关联,依赖 的区别
原文地址组合,聚合,关联,依赖 的区别 依赖与关联依赖(Dependency ) :含义:是类与类之间的连接,表示一个类依赖于另外一个类的定义;依赖关系仅仅描述了类与类之间的一种使用与被使用的关系;体现:在Java和C++中体现为局部变量、方法/函数的参数或者是对静态方法的调用;举例:人依赖于水和空气;汽车依赖汽油;转载 2014-05-26 20:24:07 · 551 阅读 · 0 评论