
设计模式
左直拳
程序猿
展开
-
设计模式学习笔记——策略模式
我觉得策略模式与工厂方法模式极其相似!策略模式:工厂方法模式:如果单从图来看,看不出有何相似之处。但看看调用方法就知道了:策略模式: Context context = new Context(); AbstractStrategy strategy; //采用哪种策略,由调用方决定 strategy = new ConcreteStrategyA(); co原创 2014-02-11 21:31:30 · 2403 阅读 · 0 评论 -
设计模式学习笔记——Decorator装饰模式
装饰模式的作用或动机就是,尽量避免继承,而使用关联。原因是层层继承下来,内容会越来越多,有失控的危险。就扩展性而言,用关联比用继承好。所谓的关联,A使用了B,就叫A关联了B。Component 抽象构件ConcreteComponent 具体构件Decorator 抽象装饰类从图可知,Decorator聚合(强关联)了Component,Component与Decorator有相同的方法operat原创 2017-02-04 19:20:41 · 770 阅读 · 0 评论 -
设计模式学习笔记——Chain of Responsibility职责链模式
重点在链。一条链,如果本节点处理不了,则传递给下一个节点处理。关键是如何传给下一个节点?主要是由本节点决定传给哪一个节点。public class Client{ public static void main(String args[]) { Leader objDirector,objManager,objGeneralManager,objViceGenera原创 2017-02-05 15:25:28 · 727 阅读 · 0 评论 -
设计模式学习笔记——Prototype原型模式
原型模型就是克隆。 还有深克隆、浅克隆,一切听上去都那么耳熟能详。原创 2017-02-06 18:47:43 · 824 阅读 · 0 评论 -
设计模式学习笔记——State状态模式
从一个类中,将有关状态的处理分离出来,独立成类,并面向接口编程。作用是可以简化代码,避免过多的条件判断:if…else…原创 2017-02-06 23:15:06 · 874 阅读 · 2 评论 -
设计模式学习笔记——Template Method模板方法模式
可能是最简单的设计模式。而且你我都用过而不自知。因为,模板方法模式也者,就是面向对象中的继承。公用部分放在父类,子类继承父类,然后扩展。呵呵。原创 2017-02-07 21:47:49 · 721 阅读 · 0 评论 -
设计模式学习笔记——Observer观察者模式
观察者模式里面有两个东西:观察者(Observer)和目标(Subject)。当目标发生变化的时候,观察者随之起舞,也作出相应的变化。此为观察者模式。这是怎么做到的?主要是目标里面存有一份观察者的名单,当目标变化时,可以按照名单逐一通知,于是观察者们做出自己的响应。public class Client{ public static void main(String a[]) {原创 2017-02-17 08:02:19 · 702 阅读 · 0 评论 -
设计模式的分类
23种设计模式,根据目的分为3类:创建型结构型行为型一、创建型 关注对象的创建过程。 1、抽象工厂 2、工厂方法 3、建造者4、原型 克隆 5、单例二、结构型 关注对象与类的组织。三、行为型 关注对象之间的交互。原创 2017-03-19 08:28:11 · 641 阅读 · 0 评论 -
设计模式学习笔记——建造者模式
建造者模式怪就怪在有一个导演类(Director)。本来,建造什么东西,应该放在建造类(Builder),由它来封装建造过程。但建造者模式里面,偏偏将这个建造过程,放在导演类。建造者只提供建造基本东西的方法,由导演类来按需调用,任意组合。如果用拍戏来做例子,建造者模式还真切合:演员就是Builder,导演就是Director。演员会各种演技(各种建造方法),就看导演怎么安排(调用)了。而我现在读的原创 2013-12-12 07:47:51 · 2213 阅读 · 0 评论 -
设计模式学习笔记——适配器模式
适配器模式比较容易理解。但还有一些适配器模式的变种:1、默认适配器模式接口里面的方法很多,如果只需实现其中一些的话,可以设置一个抽象类,继承该接口,将不必要的方法实现为空方法,而具体类继承抽象类,实现必要的方法。2、双向适配器适配器同时包含对目标类和适配者类的引用,那么目标类固然可以通过它来调用适配者的方法,同时适配者也可以通过它来调用目标类方法。原创 2013-12-15 18:03:52 · 2310 阅读 · 0 评论 -
设计模式学习笔记——命令模式
请求发送者与请求接收者之间,隔着一个命令,这就是命令模式。为什么要在中间搞一个命令对象作为中介?请求发送者直接调用接收者不行吗?如果为方便替换,符合开闭原则,可以针对接口编程,弄一个调用接收者接口,具体的接收者实现这个接口就可以了。究其原因,我猜是这样,先有请求发送者与请求接收者,不好修改,因此在中间搞一个统一接口的命令对象。因此,命令对象实质是适配器。另外,命令对象里面一个个命令,对外可能很简单原创 2014-01-05 10:49:48 · 2285 阅读 · 0 评论 -
设计模式学习笔记——Mediator中介者模式
将众多对象之间的网状关系转为全部通过一个中间对象间接发生关系,此中间对象为中介者。看图最直观: 作用不言而喻,就是降低对象之间的耦合度,乃至降低了整个系统的复杂度。有点象代理模式,更象外观模式:原创 2017-03-13 07:57:45 · 712 阅读 · 0 评论 -
《设计模式》学习笔记——桥接模式
桥接模式的定义是将抽象部分与实现部分分离,使它们都可以独立地变化。这是什么意思?抽象与实现不是本来就分离的吗?比如父类是抽象类,子类是具体实现类。其实在桥接模式里,主要是用于处理2个或以上维度会变化的情况。比如画笔有大、中、小三种,然后可以蘸上各种颜色进行画画,那么存在两个维度:画笔大小,颜色。用桥接模式来处理,抽象类处理一个维度,而实现类处理另一个维度,抽象类与实现类不是继承关系,而是关联关系。原创 2013-12-21 22:15:03 · 2096 阅读 · 0 评论 -
Autofac
Autofac真是个好东西啊。自动注入。即可以替我们构造实例,使得我们能很方便的面向接口编程。面向接口编程的最大意义,就是解耦:定义和实现分离。调用的时候,将不同的实例赋给接口对象,就能实现所谓的多态。窃以为,面向接口编程是设计模式的基础和精髓。然后,autofac是面向接口的得力助手。为什么这么说呢?你看看: public class NormalSpider { I原创 2016-07-15 21:14:01 · 5636 阅读 · 0 评论 -
Autofac
Autofac、Autofac、Autofac!好的东西要说三遍。这东西干嘛用?用于自动注入。啥注入?注水猪肉么?这要扯到控制反转(Inversion of Control,IoC),依赖注入(DI)等。其实控制反转、依赖注入都是面向接口编程的同一类概念。何谓控制反转?以前我们要使用一个对象,是这样的:Class1 obj = new Class1();面向接口编程后,是这样的://class Cl原创 2015-10-19 20:00:31 · 3873 阅读 · 0 评论 -
面向接口编程
近期在对一个现成项目进行修改、扩展。原创 2015-05-09 23:08:14 · 1997 阅读 · 0 评论 -
设计模式学习笔记——访问者模式
访问者模式分为两部分:访问者和元素(被访问者)。访问者模式适合元素比较恒定的情况,而访问者则可以很灵活地增减变动,很好地符合开闭原则。一个可以帮助理解的例子是,医院里计价的人和药房里的人可以看成是访问者,而元素则是药单。同一张药单,计价工作人员和药房工作人员的工作内容是不一样的。这个模式有个很奇特的地方,就是访问者抽象类里面,依赖或关联了具体的元素类。所以说它适合元素比较恒定的情况。原创 2014-01-29 21:03:03 · 1915 阅读 · 0 评论 -
《设计模式》学习笔记——外观模式
外观模式的作用,是对外提供一个统一的接口。如图所示:看了图,一切尽在不言中。为外部提供一个合适的接口,令人想起适配器模式。适配器模式和外观模式都是为方便统一调用而增加一个接口类,适配器是针对某一个奇形怪状的类,可能多个类就有多个适配器;而外观模式是为调用众多的类提供一个公共接口。原创 2013-12-29 17:45:57 · 2180 阅读 · 0 评论 -
设计模式学习笔记——组合模式
组合模式不难理解,其实就是树结构,分叶子节点和树节点。组合模式,叫复合模式可能更准确些。但是,组合模式有什么好处呢?用在什么场合呢?难道就是为了减少一些条件判断吗?原创 2013-12-22 18:53:36 · 2064 阅读 · 0 评论 -
设计模式学习笔记——面向对象设计原则
1、单一职责一个类只应该做一样事情2、开闭原则对扩展开放,对修改封闭3、里氏代换以父类的名义统一进行调用,使用时赋以具体子类,实现多态。4、依赖倒转是里氏代换原则另一种表述。针对接口、抽象编程,其实也就是以父类的名义统一进行调用,使用时赋以具体子类,实现多态。5、接口隔离接口的单一原则。一个接口只应负责一样职责,因此一个大接口、胖接口应该拆分成几个小接口。6、合成复用尽量使用类关联,避免继承。7、原创 2013-12-01 21:09:47 · 2200 阅读 · 0 评论 -
依赖、聚合及继承
在UML的类图中,常常涉及到 依赖、聚合、继承原创 2014-10-11 17:42:19 · 2045 阅读 · 0 评论 -
设计模式基础
23种设计模式!策略模式抽象工厂模式工厂方法模式代理模式桥接模式原型模式模板方法模式备忘录模式命令模式状态模式组合模式解释器模式适配器模式单例模式观察者模式访问者模式中介者模式装饰模式外观模式亨元模式职责链模式问你怕未?原创 2013-09-14 00:34:35 · 1968 阅读 · 1 评论 -
设计模式学习笔记——迭代器模式
迭代器模式据说有人要将它从设计模式中剔除,原因是各种语言基本都内置了这种模式,比如c#的foreach语句,实在是太平常了,不值得特别一提。但我对这个迭代器,尤其是.NET的IEnumerable、IEnumerator甚感迷惑,有必要总结一下。迭代器模式,主要由两部分组成:聚集器和迭代器。聚集器代表数据集合;迭代器用于访问聚集器里的数据。迭代器在聚集器类里面实现,类中类的方式。在.NET里面,聚原创 2014-02-12 22:32:00 · 2725 阅读 · 0 评论 -
设计模式学习笔记——类图
学习设计模式,少不了类图。要能看懂类图。类图中比较容易混淆,分辨不清的是类与类之间的关系。关系如下:1、关联1)双向关联2)单向关联3)自关联4)多重性关联5)聚合6)组合2、依赖3、泛化4、接口原创 2013-12-01 10:30:05 · 2122 阅读 · 0 评论 -
设计模式学习笔记——工厂
简单工厂、工厂方法、抽象工厂。所谓的工厂,就是生产东西的。在设计模式这里,工厂就是返回对象的。所以工厂方法、抽象工厂都是创建型的设计模式(简单工厂不算在23种设计模式里面)。简单工厂、工厂方法、抽象工厂,一个比一个复杂,但又互有关联,比如工厂方法可以退化成简单工厂,工厂方法可看成特殊的抽象工厂。1、简单工厂简单工厂最简单,主要是一个包办一切的工厂类,根据参数,返回相应的对象。这些对象通常都继承自同原创 2013-12-08 23:17:13 · 2161 阅读 · 0 评论 -
控制反转和依赖注入
网络上,这些概念看上去很复杂,并且众说纷纭。我读了其中几篇文章,按照自己的理解总结一下。凡学习,必须有笔记输出,否则等于从来没有学过。其实,控制反转(IoC)、依赖注入(DI)和设计模式中的依赖倒置是一脉相承的:都是面向接口编程的一种表述。一、依赖倒置原则:A.高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。B.抽象不应该依赖于具体,具体应该依赖于抽象。二、控制反转:两个对象之间的直接原创 2014-12-16 16:27:21 · 2300 阅读 · 0 评论 -
设计模式学习笔记——备忘录模式
备忘录模式的应用场景,可以想一下游戏存档。备忘录模式主要由三部分组成:原发器(Originator)、备忘录(memento)、Caretaker(负责人)。其中:原发器:相当于游戏,可以创建备忘录,使用备忘录;备忘录:相当于存档负责人:存储备忘录。只负责存储,但不能操作备忘录。通常用数组存储一系列备忘录。原创 2014-01-15 22:20:06 · 2181 阅读 · 0 评论 -
设计模式学习笔记:六大原则
单一职责里氏替换依赖倒置接口隔离迪米特法则开闭设计模式有六大法则。1、单一职责这好理解,每个类只干一样事情2、里氏替换子类可以扩展父类的功能,但不要修改父类的功能。意为:1)子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法2)子类可以增加自己的方法3)子类重载父类方法时,输入参数应该比父类宽松4)子类实现父类方法时,返回值应该比父类严格3、依赖倒置面向接口编程4、接口隔离接口粒度最小化。类不原创 2015-03-05 20:51:01 · 2008 阅读 · 0 评论 -
设计模式学习笔记——享元模式
享元模式英文叫Flyweight Pattern。Flyweight,应该是一个来自于拳击术语,最轻量级,也叫蝇量级。次奥,我看《大话设计模式》这本书的时候,一直错看成 亨元模式,搞不懂为什么叫这个名字。现在看清楚了,是享元,共享的享,就比较好理解了。享元模式,就是共享、重用一些现成的对象,免得构造太多,消耗资源巨大。因此,享元模式是 单例模式 + 简单工厂模式。原创 2014-01-05 18:36:00 · 2558 阅读 · 0 评论