
设计模式
夏天的技术博客
这个作者很懒,什么都没留下…
展开
-
java 设计模式 -- 责任链模式
设计模式 – 责任链模式介绍: 责任链模式是一种动态行为模式,有多个对象,每个对象分别拥有其下家的引用,连起来形成一条链,待处理对象则传到此链上,在此链进行传递,且待处理对象并不知道此会被链上的哪个对象处理,这使得我们可以动态的增加链上的对象并且分配责任。纯责任链和非纯责任链 责任链分为两种,纯责任链和非纯责任链。 纯责任链是待处理对象request在处理对象handler链上传递,原创 2015-07-30 15:28:02 · 1467 阅读 · 1 评论 -
设计模式 —— 装饰器模式(Decorator Pattern)
装饰器模式(Decorator Pattern)概念 装饰器模式 允许向一个现有的对象添加新的功能,同时又不改变其结构。装饰者可以在所委托被装饰者的行为之前或之后加上自己的行为,以达到特定的目的。组成装饰器模式由组件和装饰者组成。抽象组件(Component):需要装饰的抽象对象。 具体组件(ConcreteComponent):是我们需要装饰的对象 抽象装饰类(Decorator):内含原创 2016-05-23 11:46:16 · 8871 阅读 · 1 评论 -
设计模式 —— 观察者模式(Observer Pattern)
观察者模式(Observer Pattern)概念 观察者模式:定义了对象之间的一对多个关系,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。组成图片来源wiki观察者模式由 主题 和 观察者 组成。接口主题类(Subject):主题接口,对象使用该接口成为观察者,主题是有状态的对象。 具体主题类(ConcretSubjectA):该类主要实现了 notifyObser原创 2016-05-23 10:01:27 · 689 阅读 · 0 评论 -
设计模式 —— 代理模式(Proxy Pattern)
代理模式(Proxy Pattern)概念: 定义:代理模式 为另一个对象提供一个替身或占位符以控制这个对象的访问。代理模式很好理解,在生活中也很常见。举个简单的例子,我们自己能做很多事情(动作),比如写作业,出去玩等。当我们和父母在家的时候,同学叫我们出去玩,父母先收到消息,然后忽略掉出去玩的信息。如果同学叫我们去写作业,父母接收到后在传达给我们。此时父母就是我们的代理,并且对我们 资源 进原创 2016-06-02 10:11:26 · 906 阅读 · 0 评论 -
设计模式 —— 状态模式(State Pattern)
状态模式(State Pattern) 概念:状态模式 允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类 在软件设计中,我们经常会遇需要编写有很多状态的程序。最简单的如乘坐电梯程序,当我们要坐电梯时需要判断电梯的状态,只有当电梯处于当前楼时我们才能乘坐,当电梯不在当前楼层时我们要按下按钮等待电梯到来。在平时一般都通过 if…else 或者 switch 判断状态后处理,这种固定原创 2016-06-01 01:08:42 · 4312 阅读 · 0 评论 -
设计模式 —— 组合模式(Composite Pattern)
组合模式(Composite Pattern)概念: 定义:组合模式 允许你将对象组合成树型结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。在大多数情况下,我们可以忽略对象组合和个别对象之间的差别。 在日常生活中我们经常会遇到树型结构的问题,比如典型的公司管理,上司管理不同的下属,下属也可能属于某个部门的上司。组合模式可以模糊简单元素和复杂元素的概念,客户原创 2016-05-31 15:33:20 · 792 阅读 · 0 评论 -
设计模式 —— 迭代器模式(Iterator Pattern)
迭代器模式(Iterator Pattern)概念: 定义:迭代器模式 提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。 迭代器模式是一种简单常见的设计模式,在我们使用编程语言中的集合容器都会有迭代器。组成:Aggregate(抽象聚合):共同的接口供所有的聚合使用。ConcreteAggregate(聚合):持有一个对象的集合,并实现 createIterator 方原创 2016-05-30 23:06:06 · 839 阅读 · 0 评论 -
设计模式 —— 模板方法模式(Template method Pattern)
模板方法模式(Template method Pattern)概念: 模板方法模式 在一个方法中定义一个算法的 骨架,而将一些步骤延迟到子类。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。组成:templateMethod(模板方法):定义了某个算法的模板顺序或一组步骤,其中任何步骤都可以是抽象的,由子类来实现。primitiveOperation1(抽象步骤方法):原创 2016-05-30 11:20:15 · 701 阅读 · 0 评论 -
设计模式(九)外观模式Facade(结构型)
原文:设计模式(九)外观模式Facade(结构型)感谢作者博文^_^设计模式--外观模式Facade(结构型):1. 概述 外观模式,我们通过外观的包装,使应用程序只能看到外观对象,而不会看到具体的细节对象,这样无疑会降低应用程序的复杂度,并且提高了程序的可维护性。例子1:一个电源总开关可以控制四盏灯、一个风扇、一台空调和转载 2016-05-30 01:52:44 · 638 阅读 · 0 评论 -
设计模式 —— 适配器模式(Adapter Pattern)
适配器模式(Adapter Pattern)概念: 定义:适配器模式 将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。组成:Client:客户端,直接操控适配器。 Target(目标接口):适配器实现的目标接口。 Adapter:适配器,当被调用时委托给被适配者。 Adaptee:被适配者,适配器所有的请求都委托给自己。注:上图是对象适配器模式,在支持原创 2016-05-30 01:13:15 · 676 阅读 · 0 评论 -
设计模式 —— 命令模式(Command Pattern)
命令模式(Command Pattern)概念: 概述:在软件设计中,我们经常会遇到某些对象发送请求,然后某些对象接受请求后执行,但发送请求的对象可能并不知道接受请求的对象是谁,执行的是什么动作。此时可通过 命令模式 来实现,让发送者和接受者完全的松耦合,这样可大大增强程序的灵活性。 定义:命令模式 将“请求”封装成对象,以便使用不同的请求,队列或者日志来参数化其他对象。命令模式也支持可撤销的原创 2016-05-29 18:34:53 · 9556 阅读 · 1 评论 -
设计模式 —— 策略模式(Strategy Pattern)
策略模式(Strategy Pattern)概念 策略模式 定义了算法族,分别封装起来,让它们之前可以相互替换,此模式让算法的变化独立于使用算法的客户。 策略模式把 对象本身和运算规则 区分开来,其功能非常强大,因为这个设计模式本身的核心思想就是面向对象编程的多形性的思想。组成策略模式 UML 图如下所示: (图片来自维基百科)策略模式将不同的算法封装成类,如上图的 ConcreteS原创 2016-05-12 21:10:45 · 820 阅读 · 0 评论 -
设计模式 —— 单例模式(Singleton)
单例模式(Singleton)概念: 单例模式 确保一个类只有一个实例,并提供一个全局访问点。经典单例:public class Singleton { private static Singleton uniqueInstance; //构造函数设定为 private,避免被创建 private Singleton() {} public static Sing原创 2016-05-24 14:18:02 · 639 阅读 · 0 评论 -
设计模式 —— 抽象工厂模式(Abstract Factory)
抽象工厂模式(Abstract Factory)上一篇文章中的工厂模式仅仅产生食物,如牛奶、糖。但如果不同城市的奶和糖加工制造和口味都是不同的。普通的工厂模式就无法满足了,此时我们来看 抽象工厂模式概念: 提供一个创建 一系列 相关或相互依赖对象的接口,而无须指定它们具体的类。组成:AbstractFactory:抽象工厂ConcreteFactory:具体工厂AbstractProdu原创 2016-05-24 02:30:05 · 707 阅读 · 0 评论 -
设计模式 —— 工厂模式(Factory Pattern)
工厂模式(FactoryPattern)概念: 工厂模式 定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。组成:工厂模式由 Product 和 Factory 组成。抽象产品(Product):所有产品实现的接口 具体产品(ConcreteProduct):被工厂创建的具体产品 抽象工厂(Creator):所有工厂的抽象类 具体工厂(Concr原创 2016-05-24 01:25:23 · 683 阅读 · 0 评论 -
设计模式 —— 动态代理(Dynamic Proxy)
动态代理(Dynamic Proxy)静态代理的缺点: 静态代理是有缺点的,看下图。我们为每个类实现代理,但代理的内容却可能是相同的,比如一个项目中的日志代理,对象缓存代理等等。为每个类实现代理大大提高了代码量,可能会变得难以控制。动态代理: 用一句话来简单概述:动态代理按功能固定代理类,动态的更换 代理类中的被代理对象。静态代理不固定代理类,为每个被代理对象创建代理类。例子: 给两原创 2016-06-21 10:30:22 · 1029 阅读 · 0 评论