Java装饰者模式简介 一.假设有一个Worker接口,它有一个doSomething方法,Plumber和Carpenter都实现了Worker接口,代码及关系如下: 1.Worker.java package decorator; public interface Worker { public void doSomething(); } 2.Plumber.java public class Plumber implements Worker { @Override public void…
一.目标 增加filterchain功能 二.代码 1.Filter.java public interface Filter { public String doFilter(String str); } 2.FilterChain.java import java.util.ArrayList; import java.util.List; public class FilterChain implements Filter { private List<Filter> filters =…
一.目标 数据提交前做各种处理 二.代码 1.MsgProcessor.java public class MsgProcessor { private List<Filter> filters = new ArrayList<Filter>(); private String msg; public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public S…
一.目标 1.用Filter模拟处理Request.Response 2.思路细节技巧: (1)Filter的doFilter方法改为doFilter(Request,Resopnse,FilterChain),有FilterChain引用,为利用FilterChain调用下一个Filter做准备 (2)FilterChain继承Filter,这样,FilterChain既是FilterChain又是Filter,那么FilterChain就可以调用Filter的方法doFilter(Reque…
<马士兵设计模式学习>学习了以下模式: 1.装饰者模式(例子:水管工,木工) 2.策略模式(例子:老师用职称比大小.学生用成绩比大小) 3.简单工厂模式(例子:VechileFactory,CarFactory,PlaneFactory),方便产品维度的扩展,但生产系列产品不方便,且易工厂灰泛滥 4.抽象工厂模式(例子:三星工厂.海尔工厂)方便生产系列产品,但增加新产品时,要修改AbstractFactory等多处地方 5.观察者模式(例子:父亲.爷爷监听小孩;模拟awt的button) 6.…
写在模式学习之前 什么是设计模式:在我们进行程序设计时,逐渐形成了一些典型问题和问题的解决方式,这就是软件模式:每个模式描写叙述了一个在我们程序设计中常常发生的问题,以及该问题的解决方式:当我们碰到模式所描写叙述的问题,就能够直接用对应的解决方法去解决问题,这就是设计模式. 设计模式就是抽象出来的东西.它不是学出来的,是用出来的:也许你根本不知道不论什么模式.不考虑不论什么模式.却写着最棒的代码,即使以"模式专家"的角度来看,都是最佳的设计.不得不说是"最佳的模式实践&quo…
装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能.对原有功能的增强. 我们通过下面的实例来演示装饰器模式的用法.其中,我们将把一个形状装饰上不同的颜色,同时又不改变形状类. 概述 意图 动态地给一个对象添加一些额外的职责.就增加功能来说,装饰器模式相比生成子类更为灵活. 主要解决 一般的…
参考地址:http://www.cnblogs.com/zhili/p/DecoratorPattern.html 一.定义:装饰者模式以对客户透明的方式动态地给一个对象附加上更多的责任,装饰者模式相比生成子类可以更灵活地增加功能. 二.装饰者模式实现在软件开发中,我们往往会想要给某一类对象增加不同的功能.比如要给汽车增加ESP.天窗或者定速巡航.如果利用继承来实现,就需要定义无数的类,Car,ESPCar,CCSCar,SunRoofCar,ESPCCSCar……很容易就导致“子类爆炸”问题.…
装饰器模式,最典型的例子. 工厂新开了流水线,生产了手机外壳,蓝天白云花色.刚准备出厂,客户说还要印奶牛在上面,WTF…… 时间上来不及,成本也不允许销毁了重来,怎么办?弄来一机器A,专门在蓝天白云的外壳再印奶牛. 最后通过机器A的装饰,得到了有奶牛的外壳. 装饰器中调用传递进来的Component的方法,同时再附加上新的方法,在保证外部接口一致的情况下,达到增加新行为的目的. 简单代码,仅包含父类和装饰器: class CComponent { public CComponent() { }…
需求 做一个咖啡店的订单系统. 买咖啡时,可以要求加入各种调料,如奶,豆浆,摩卡等.咖啡店会根据调料的不同收取不同的费用.订单系统要考虑这些. 初版设计 然后下面就是所有的咖啡....: cost方法将计算出咖啡加上各种调料后的价格. 这种方法太笨了...必须换一种. 再版设计 使用实例变量和继承! 但是有新的问题: 1.调料价格变化就需要更改现有的代码. 2.一旦出现新的调料,就需要加上新的方法,并改变超类中的cost方法. 3.如果有新的饮料,有些调料可能会不适用. 4.想买双倍的摩卡咖啡怎…