设计模式
文章平均质量分 90
杨家昌
这个作者很懒,什么都没留下…
展开
-
单例模式(Singleton Pattern)
什么是单例模式:确保一个类只有一个实例,并且提示一个全局访问点。单例模式有什么用处:很多场景下有一些对象我们只需要一个,比方说:线程池,缓存,驱动程序等等。实际上这些对象只能有一个实例,如果存在多个实例就会导致一些问题,例如程序的行为异常(线程池实例多了就不止是我们当初设想的比方说10个线程,而是10*n个线程了),资源使用过量(本地缓存实例多了,哪怕各个缓存实例间保持了同步,原创 2016-08-06 15:02:28 · 350 阅读 · 0 评论 -
代理模式(静态代理、jdk动态代理)
1.代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。2.组成的角色:抽象角色:通过接口或抽象类声明真实角色实现的业务方法。代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。真实角色:实现抽象角色原创 2016-09-27 17:56:12 · 378 阅读 · 0 评论 -
组合模式(Composite Pattern)
组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。有时候又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。组合模式让你可以优化处理递归或分级数据结构。有许多关于分级数据结构的例子,使得组合模式非常有用武之地。原创 2016-09-18 15:49:00 · 372 阅读 · 0 评论 -
迭代器模式(Iterator)
迭代器模式,提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。JDK中已经为我们设计好了一套完善的迭代器------java.util.Iterator。通过这个包名可以发现所谓的迭代器之前是一种工具,这个工作提供的功能就是用来顺序访问一个聚合对象中的各种元素。/** * 迭代器模式,使用JDK中的Iterator * 这里的聚合元素指的就是List,Set原创 2016-09-18 10:42:07 · 314 阅读 · 0 评论 -
观察者模式(Observer Pattern)
1. 概述 有时被称作发布/订阅模式,观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。2. 解决的问题 将一个系统分割成一个一些类相互协作的类有一个不好的副作用,那就是需要维护相关对象间的一致性。我们不希望为了维持一致性而使各类紧密耦合,这样会给维护、扩展和重用都带原创 2016-08-25 12:41:33 · 417 阅读 · 0 评论 -
策略模式(Strategy Pattern)
概述:在应用程序开发过程中,实现一种功能存在多种不同的方法或者说是策略,如排序,计算等等。如何选择策略就成了编写代码是否优雅的关键。硬编码并不可取,写多种方法分别实现策略然后公开给客户端调用,或者通过if...else分支语句来选择,都不够优雅,加大了代码维护的难度。这个时候我们就可以考虑使用策略模式。策略模式:策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共原创 2016-09-13 14:13:53 · 386 阅读 · 0 评论 -
状态模式(Stats Pattern)
在实际项目中,应用程序往往需要根据不同的情况做出不同的处理。在开发工程中,需要考虑到各种场景、分支,常常会使用到if..else或者switch case等分支,通过判断条件处理不同的情况。当这种判断变得复杂的时候,分支增多,代码量增多,对代码的维护和可读性、扩展性带来了不好的影响。这种时候就可以考虑使用状态模式。状态模式:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改原创 2016-09-13 10:32:22 · 410 阅读 · 0 评论 -
模板方法模式(Template Pattern)
1. 概述 定义一个操作中的算法的骨架,而将步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义算法的某些特定步骤。2. 模式中的角色 2.1 抽象类(AbstractClass):实现了模板方法,定义了算法的骨架。 2.2 具体类(ConcreteClass):实现抽象类中的抽象方法,已完成完整的算法。模板方法模式是结构最简单的行为型设计模式原创 2016-09-12 13:57:47 · 515 阅读 · 0 评论 -
命令模式(Command Pattern)
1命令模式是一个高内聚的模式。定义如下:将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。 2.角色说明:● Receive接收者角色该角色就是干活的角色,命令传递到这里是应该被执行的。● Command命令角色需要执行的所有命令都在这里声明。● Invoker调用者角色原创 2016-09-11 15:04:28 · 436 阅读 · 0 评论 -
三个工厂模式(Simple Factory & Factory Method & Abstract Factory)
简单工厂模式(Simple Factory ):简单工厂又叫做静态工厂方法,其实不是一种设计模式,反而更像是一种编码习惯。角色及其职责:工厂(Creator)角色简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类的创建产品类的方法可以被外界直接调用,创建所需的产品对象。抽象产品(Product)角色简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共原创 2016-08-29 15:18:56 · 843 阅读 · 0 评论 -
外观模式(Facade Pattern)
外观模式:提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。有什么用处:(1)实现了子系统与客户端之间的松耦合关系。(2)客户端屏蔽了子系统组件,减少了客户端所需处理的对象数目,并使得子系统使用起来更加容易。用代码说话:完成一件事,需要3个步骤:步骤A,步骤B,步骤Cpublic class S原创 2016-09-09 13:37:50 · 417 阅读 · 0 评论 -
两种适配器模式(Adapter Pattern)
1. 概述 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。2. 解决的问题 举个例子:有一个三相插座,可是此时使用的小台灯的插头是一个两相插头,插不进去呀。这个时候就会想到使用插线板,插线板的插头可以插入家里的三相插座,同时插线板提供了两相插孔给小台灯使用。这里的插线板就是我们所说的适配器。原创 2016-09-09 10:28:15 · 5271 阅读 · 0 评论 -
装饰模式(Decorator Pattern)
装饰模式:以对客户透明的方式动态地给一个对象附加上更多的责任。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。若要扩展功能,装饰者比继承提供了更有弹性的替代方案。装饰模式的类图如下:在装饰模式中的角色有: ● 抽象构件(Component)角色:给出一个抽象接口,以规范准备接收附加责任的对象。 ● 具体构件(ConcreteCompon原创 2016-08-28 10:16:10 · 343 阅读 · 0 评论 -
责任链模式(Chain of Responsibility)
责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。涉及角色:1.抽象处理者(Handler)角色:定义出一个处理请求的接口。如果需要,接口可以定义出一原创 2016-09-19 11:30:34 · 415 阅读 · 0 评论