网站大量收购闲置独家精品文档,联系QQ:2885784924

zhjrGoF结构型模式装饰模式.ppt

  1. 1、本文档共26页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《设计模式》 GoF-结构型模式 4.1 Adapter Pattern(适配器模式) 4.2 Bridge Pattern(桥接模式) 4.3 Composite Pattern(组合模式) 4.4 Decorator Pattern(装饰模式) 4.5 Facade Pattern(外观模式) 4.6 Flyweight Pattern(轻量级模式) 4.7 Proxy Pattern(代理模式) GoF-结构型模式 定义 动态地给一个对象增加其他职责(Responsibility)。 就增加对象功能来说,装饰模式比生成子类实现更为灵活。 装饰者模式,也叫做包装器(Wrapper)模式,它的主要用途,是在不改变一个类的代码、也不改变它的继承体系的前提下,为这个类增加功能。当你可能想为一个类增加更多功能时,使用装饰者模式意味着你的新版本的代码不必通过继承这个类来重用现有的功能。 抽象构件角色:定义一个抽象接口,来规范准备附加功能的类。 具体构件角色:将要被附加功能的类,实现抽象构件角色接口。 抽象装饰者角色:持有对具体构件角色的引用并定义与抽象构件角色一致的接口。 具体装饰角色:实现抽象装饰者角色,负责为具体构件添加额外功能。 给出一个名为Action的接口,它有两个方法:act1()和act2(),再给出一个这个接口的具体类,名为ConcreteAction,那么装饰者是一个实现Action接口并且构造器以一个Action(通常是ConcreteAction)对象为参数的类。这样代码将大概是下面的样子: public interface Action { public void act1() ; public void act2(); } public class ConcreteAction implements Action { public void act1() {…} public void act2(){…} } public class Decorator implements Action { private Action action; public ActionDecorator(Action action) { this.action = action; } public void act1() { action.act1();} public void act2() {action.act2();} } public class ConcreteDecorator extends Decorator { public ConcreteDecorator(Action action) { super( action); } @Override public void act1() { super.act1();this. act3() ;} public void act3() {…} public void act4() {…} } 思考: 装饰者模式与适配器模式的联系区别? 适配器,从它的名字可以看出,是为了适应某种行为。也就是让本来不能使用的东西通过某种转换可以使用,它的关键在于一种转换.适配是复用现存的类,使它的接口与新的环境要求相一致。 而装饰者,从名字看,装饰嘛,是增加。装饰者是为现存的对象动态的增加新功能 程序代码背景: 饮料店卖一些饮料Drink(如咖啡,茶…), 在饮料中可以增加调料(如奶,糖..),使他的味道更可口些, 就是说调料是来装饰饮料的 //元件的抽象类 abstract class Drink{ String description = ; public String getDescription(){ return description; } abstract public void print(); public abstract double cost(); } class Coffee extends Drink{ public Espresso(){ description = Coffee ; } public void print(){ System.out.println( Coffee ); } publi

文档评论(0)

phljianjian + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档