
设计模式
文章平均质量分 74
Face3
这个作者很懒,什么都没留下…
展开
-
设计模式(1)--单例模式(singleton)
单例模式是面试中问到的最多的模式问题之一。什么是单例,为什么要用单例,单例模式的不合理的实现方法问题,这里就不讨论了。下面将深入学习单例模式的一些理解记录下来(详细的解释我觉得这篇文章写的很好深入浅出单例模式):1.有一个问题在写单例代码的时候一定要记住,那就是不管什么写法,必须写私有的构造函数,否则你无法真正阻止类被意外的实例化。私有构造函数也防止了继承的存在。2.synchronized,vol原创 2015-12-01 18:07:31 · 573 阅读 · 0 评论 -
设计模式(12)--State状态模式&Strategy策略模式
一个对象根据不同的状态,执行不同的行为。我们如何去编写执行行为的方法呢?用逻辑判断语句判断状态不同而执行不同的代码?显然不会选择这种耦合的复杂的逻辑。解耦是显而易见的,即把不同状态下的执行代码分离开来。从而便有了状态模式。 状态模式的要点: 1.把不同状态的行为处理抽象为Handle方法,并在抽象出的状态类中设置这个方法。 2.对象必须持有这个状态类,并设置一个初始的具体状态类,例如Con原创 2016-02-25 16:44:28 · 870 阅读 · 0 评论 -
设计模式(11)--Mediator中介者模式&Observer观察者模式
一、中介者模式理解起来很简单,即多个对象之间需要交互,那么这些对象间的交互就会形成网状结构。引入中介者,各对象根本不知道其它对象的存在,他们只需要把信息发送给中介者,由中介者来控制吧信息传递给哪些对象。所以,就变成了一个星形的结构。 中介者模式的目的很明显,就是为了解耦,但是缺点,也是比较明显,那就是中介者类本身会变得复杂,牵扯过多。所以,如果网状结构不是非常复杂,那么就不一定要考虑中介者。一旦使原创 2016-02-24 17:17:36 · 1403 阅读 · 0 评论 -
设计模式(9)--Proxy代理模式
代理模式是一个很重要的模式,因为大名鼎鼎的AOP,以及Webservice等都与代理模式有关系。代理模式的实质,是通过代理类来隐藏实际类(或者叫委托类),从而控制实际对象的访问。代理模式的用处,可以用来封装webservice形式的远程地址调用;可以用来预置对象的外观,避免直接加载大对象的耗时(有兴趣可以仔细研究浏览器代理);可以用于权限安全控制;再就是AOP切面增强。 PS:WebServic原创 2016-02-16 17:27:08 · 500 阅读 · 0 评论 -
设计模式(7)--Decorator 装饰模式
装饰模式也是一种日常编码中经常会不自觉采用的设计模式。其核心理念是:一个类有自己的核心功能和职责,且这个类的代码相对已经固定,不希望改动维护。现在要为这个类加入一谢额外的功能,这些功能不是一定必须的,而且可能是动态添加的,根据实际要求加入某一种或几种。但是不管加入什么额外功能,客户眼中始终还是在操作这个核心功能类。这个时候,我们的处理方式就是,为每种动态的功能,单独的提供一个类,来完成对核心类的“装原创 2016-02-02 17:15:39 · 592 阅读 · 0 评论 -
设计模式(8)--flyweight 享元模式
flyweight意为轻量,但是用在设计模式的翻译中变成了享元。这个单词名字确实不好取。这两个意思,其实都能表达该模式的意义。 flyweight模式,实际上的目的就是控制对象的数目。我们已经见识过很多控制对象数目的方法,例如池化,单例,缓存,常量表等等。 flyweight主要是通过将共性的行为和状态共享,来达到控制对象的目的,现在即可以明白轻量和享元这两个词的意思了。 flyweigh原创 2016-02-15 17:17:03 · 517 阅读 · 0 评论 -
设计模式(6)--Bridge 桥接模式
这个模式在实际开发中应该是使用非常多的,不知不觉中我们就使用了桥接模式。我们拿电脑举例(Apple)除外。如果让你动手攒一个台式机,你可以上京东,在电脑产品体系里选择各种配件,组装出一台电脑。那么这个各种配件和电脑之间,是什么关系呢?显然是has-a而不是is-a的关系。这个道理即是如果能使用合成则优先考虑合成而非继承,除非确实是is-a的关系。 假如你用继承is-a的关系来表示整个电脑的产品体系,原创 2016-02-01 15:16:54 · 560 阅读 · 0 评论 -
设计模式(5)--Adapter 适配器
前面4种模式都是与创建对象相关,适配器开始,是与程序结构相关的模式,即以合理的结构组织程序达到设计模式准则。 从前,Adaptee实现的是OldTarget接口,实现了SpecialRequest()方法,Adaptee工作的很好。突然,改变来了,新的软件版本发布,集合的遍历器变成了新的iterator。接口也变成了Target,Target接口里给出的是request方法。 从新软件版本使原创 2016-01-29 16:40:18 · 523 阅读 · 0 评论 -
设计模式(4)--Builder 建造者(构建器)
Builder和工厂模式一样,都是创建对象类型的模式。同样是创建类型的模式,其区别在于:Builder是应用于更为复杂的对象创建过程。举例说明:生产一辆玩具车,一个工厂一个方法就搞定了。而要生产一辆汽车,那部件太多了,部件不能少,且把所有这些部件组装在一起,也要有一套非常繁琐的流程和顺序。这个时候,工厂模式中的工厂接口,就不是只写一个创建产品的抽象方法就够了。你必须考虑到使这个接口里具备一系列必不可原创 2016-01-28 16:51:31 · 662 阅读 · 0 评论 -
设计模式(3)--Prototype 原型模式
受spring配置文件bean的属性非单例即prototype的影响,老是不自觉的认为两种模式是对立的。。。事实上,单例的对象确实和原型模式冲突,但是原型模式的重点绝不是单例模式的对立面。原型模式的重点在于:指定一个类型作为原型,并使用Clone()方法去创建这个类型的对象实例。和工厂模式一样,也是一种创建对象的方式。在实际应用中,原型模式经常是结合工厂等模式出现,比如在factory的实现中使用c原创 2016-01-25 17:05:11 · 579 阅读 · 0 评论 -
设计模式(2)--工厂模式
工厂指的是创建对象的工厂,工厂模式是一种创建对象的模式,使用factory.createXXX你就能获得想要的对象。那么为什么要使用工厂模式呢?有很多足够重要的理由:实际开发中很多情况并不能只用一句new就能得到想要的对象。熟悉的比如spring中各种bean之间的相互依赖,你要得到一个service,不光只new service,还需要new 业务逻辑对象,new dao对象。所以spring使原创 2016-01-21 17:22:22 · 466 阅读 · 0 评论 -
设计模式(10)--Command命令模式
从本篇开始进入到行为类型的设计模式。 行为类型的模式有一些先简略带过。比如很复杂的解释器模式,这个在实际应用中出现的较少。 另外一个是职责链模式,模式本身是很容易理解的,一系列的处理类遵循一样的接口,都有者其后继处理类successor和自己的处理方法。对于客户端调用,由职责链的第一个类开始执行处理方法,判断自己是否能够执行或者传给下一个successor.客户端和链上的任何一个类只需要知道把请原创 2016-02-19 16:46:37 · 530 阅读 · 0 评论