装饰模式:
动态的将责任附加到对象上
对于扩展性而言,装饰模式比继承更具有弹性,因为装饰模式利用组合关系
关键地方:
让装饰者与被装饰者实现同一个接口,或者继承同一个抽象类,目的是为了让它们具有统一的类型
类型统一了,方法就可以接收所有的子类型,然后在运行时动态绑定到具体的子类对象上
===》接口:让装饰者与被装饰者具有统一的类型
package pattern.decorator; public interface Food { String description(); double cost(); }
package pattern.decorator; public abstract class AbstractFood implements Food { protected String description = "未知食物"; public String description() { return description + "(" + cost() + ")"; } }
===》被装饰者
package pattern.decorator; public class Noodle extends AbstractFood { public Noodle() { this.description = "面条"; } public double cost() { return 5.00; } }
package pattern.decorator; public class Dumpling extends AbstractFood { public Dumpling() { this.description = "饺子"; } public double cost() { return 8.00; } }
===》装饰者
package pattern.decorator; public class Cayenne implements Food { Food food; public Cayenne(Food food) { this.food = food; } public double cost() { return food.cost() + extraFee(); } private double extraFee() { return 1.00; } public String description() { return food.description() + " + 辣椒(" + extraFee() + ")"; } }
package pattern.decorator; public class Parsley implements Food { Food food; public Parsley(Food food) { this.food = food; } public String description() { return food.description() + " + 香菜(" + extraFee() + ")"; } public double cost() { return food.cost() + extraFee(); } private double extraFee() { return 0.50; } }
===》测试
package pattern.decorator; import java.text.NumberFormat; public class Test { public static void main(String[] args) { Food food = new Noodle(); food = new Cayenne(food);//装饰 food = new Parsley(food);//装饰 food = new Parsley(food);//再装饰 String desc = food.description(); System.out.println(desc); double total = food.cost(); String cost = NumberFormat.getCurrencyInstance().format(total); System.out.println(cost); } }
面条(5.0) + 辣椒(1.0) + 香菜(0.5) + 香菜(0.5)
¥7.00
相关推荐
C++23种设计模式之 装饰模式。:当你向旧的类中添加新代码时,一般是为了添加核心职责或主要行为。而当需 要加入的仅仅是一些特定情况下才会执行的特定的功能时(简单点就是不是核心应用的功 能),就会增加类的...
设计模式专题之(七)装饰模式---设计模式装饰模式示例代码(python--c++)
iOS 设计模式 装饰模式
C#设计模式 装饰模式源码 component ConcreteDecorator
设计模式装饰模式PPT学习教案.pptx
软件设计模式之装饰模式讲解ppt,可用于教学课件。
设计模式 - 装饰模式(C++实例) 若有问题,请指出。
java代码 装饰着模式 文字说明 结构图 实例代码,不会的可以私信我
HeadFirst 设计模式学习笔记3--装饰模式 Demo http://blog.csdn.net/laszloyu/archive/2010/05/12/5582561.aspx
设计模式--装饰者模式java例子
23个设计模式之一的装饰模式,java编写的代码示例,极客学院课程的设计模式下载的课件资料,附上Head First设计模式第三版的pdf,另外还有UML基础,案例与应用的pdf
java设计模式之装饰者模式代码
设计模式 c# 装饰模式
JAVA设计模式之装饰模式代码
java 23种设计模式 装饰模式,详细源码分析请看博客: http://blog.csdn.net/github_22022001/article/details/41543475
54-Spring设计模式之装饰器模式1
9 装饰模式 10 原型模式 11 委派模式 12 适配器模式 设计模式综合运用 1 门面+模版方法+责任链+策略 2 门面+模版方法+责任链+策略+工厂方法 3 动态代理+Spring AOP 4 责任链模式进阶 Spring Framework设计模式 ...
23种设计模式--装饰模式
该系统是一个画图程序,我们要用设计模式的思想来设计系统结构,然后实现基本图形的绘制功能。 1.1 设计模式要求 在软件的设计中请使用到三种以上设计模式。 1.2 画图基本要求 能实现基本图形的绘制功能,包括实现...
设计模式—装饰者模式