先来看一个例子:
如果我们读取文件内容往往都会使用
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(new File("c:\\a.txt"));
上大学的时候老师告诉我们这个叫流,在FileInputStream上面又套了一个更大的管道,其实这是使用了装饰者模式,在不改变底层代码的情况下,给对象赋予新的功能。
现在通过一个实例来展示装饰者模式,我们知道coca-cola有多种饮品,比如CocaCola和Sprite,它们的包装又分为大瓶、中瓶、小瓶,使用装饰者模式就可以快速的知道拿在手上的饮品的种类和价格。
public abstract class Drinking {
String description = "unknow";
public String getDescription(){
return description;
}
public abstract double cost();
}
public class CocaCola extends Drinking{
@Override
public double cost() {
// TODO Auto-generated method stub
return 1.0;
}
@Override
public String getDescription() {
// TODO Auto-generated method stub
return "Coca-Cola";
}
}
public class Sprite extends Drinking{
@Override
public double cost() {
// TODO Auto-generated method stub
return 1.0;
}
@Override
public String getDescription() {
// TODO Auto-generated method stub
return "Sprite";
}
}
public class BigBottle extends Drinking{
Drinking btl;
public BigBottle(Drinking btl){
this.btl = btl;
description = "this is a big bottle";
}
@Override
public double cost() {
return 1.5 + btl.cost();
}
public String getDescription(){
return btl.getDescription()+description;
}
}
public class MiddleBottle extends Drinking{
Drinking btl;
public MiddleBottle(Drinking btl){
this.btl = btl;
description = "this is a middle bottle";
}
@Override
public double cost() {
return 1.5 + btl.cost();
}
public String getDescription(){
return btl.getDescription()+description;
}
}
public class NormalBottle extends Drinking{
Drinking btl;
public NormalBottle(Drinking btl){
this.btl = btl;
description = "this is a normal bottle";
}
@Override
public double cost() {
return 1.5 + btl.cost();
}
public String getDescription(){
return btl.getDescription()+description;
}
}
public class TestMain {
public static void main(String[] args){
Drinking coca = new CocaCola();
coca = new BigBottle(coca);
System.out.println(coca.getDescription());
System.out.println(coca.cost());
}
}
分享到:
相关推荐
java设计模式之装饰者模式代码
Qt设计模式之装饰者模式
设计模式之装饰者模式,极客学院VIP课堂的课件,装饰者模式的示例
javascript设计模式之装饰者模式.docx
装饰者模式是在不改变原有类和不使用继承的情况下,动态地扩展一个对象的功能,代码中通过对象参数进行选择。
设计模式--装饰者模式java例子
Spring 设计模式之装饰器模式详解 在软件设计中,经常会遇到需要在不修改原有代码的情况下,添加新的功能或行为。这时,装饰器模式便可以发挥其作用。在 Spring 设计模式中,装饰器模式是非常重要的一种设计模式。 ...
// 第10步:执行RedBalls对象的decorate方法总结装饰者模式是为已有功能动态地添加更多功能的一种方式,把每个要装饰的功能放在单独的函数里,然后用
c# ,设计模式,装饰者模式,星巴兹咖啡,基本上就是head first 上的例子的C#实现,根据自己的理解,作了一点点改动,可以直接运行。
设计模式—装饰者模式
设计模式—装饰者模式,介绍的非常详细,讲解透彻
NULL 博文链接:https://jacky-dai.iteye.com/blog/1132229
设计模式 - 装饰者模式
软件设计模式之装饰模式讲解ppt,可用于教学课件。
设计模式 c# 装饰模式
使用PHP实现的设计模式之装饰者模式,希望对您的开发有所启发。
Java 经典设计模式讲解以及项目实战 设计模式简介:主要介绍各种设计模式的概念和运用场景等 设计模式综合运用:主要是笔者在实际工作中运用到的一些设计模式综合运用事例的提炼 Spring设计模式简介:主要是讲述...
设计模式主要分为三大类: 1.创建型模式:工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式。 2.结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。 4.行为型模式:...