JAVA设计模式温故篇-装饰者模式
来源:互联网 发布:淘宝几块钱的东西包邮 编辑:程序博客网 时间:2024/06/08 06:27
如果大家知道cosplay的话,会发现cosplay扮演者总是利用服装、饰品、道具以及化妆来把自己扮演动漫作品、游戏中的角色。
可能我们第一眼看到下面这张图片就会说是路飞,而实际上他是一个普通人,只是把自己装饰成了路飞。而JAVA中的装饰者模式也是有异曲同工之妙。接下来举个列子
我们生活中有原味茶,奶茶,珍珠奶茶,而奶茶只是在原味茶的基础上添加了牛奶作为装饰,而实际上还是茶,珍珠奶茶也只是在奶茶的基础上加了珍珠作为装饰,实际上还是茶。
虽然都是茶,但是他们的价格和叫法都不一样。
牛奶和珍珠则作为装饰者,但他们离不开茶作为基础。
我们定义原味茶:3元
加牛奶:多加2元
加珍珠:多加2元
首先定义一个茶的基类Beverage
代码:
package com.hpg.demo;/** * 定义饮料类 包括饮料描述和价格 * @author huarizhong * */public abstract class Beverage {String description = "Unknow Beverage";public String getDescription(){return description;}public abstract double cost();}
定义一个装饰者的基类CondimentDecorate
代码:
package com.hpg.demo;/** * 装饰者类,在饮料的基础上加了一些佐料,实际上也是饮料 * @author huarizhong * */public abstract class CondimentDecorate extends Beverage {public abstract String getDescription();}
定义原味茶,继承自Bevage
package com.hpg.demo;/** * 原味饮料(茶) 3元 * @author huarizhong * */public class Tea extends Beverage{public Tea(){description = "Tea";}@Overridepublic double cost() {return 3;}}
定义装饰者牛奶,继承自CondimentDecorate
代码:
package com.hpg.demo;/** * 装饰者(牛奶佐料)加牛奶需要额外2元 * @author huarizhong * */public class Milk extends CondimentDecorate{private Beverage mBeverage;public Milk(Beverage beverage){this.mBeverage= beverage;}@Overridepublic String getDescription() {return "Milk-"+mBeverage.getDescription();}@Overridepublic double cost() {return 2+mBeverage.cost();}}
定义装饰者珍珠,继承自CondimentDecorate
代码:
package com.hpg.demo;/** * 装饰者(珍珠) 加珍珠需要额外2元 * * @author huarizhong * */public class Pearl extends CondimentDecorate {private Beverage mBeverage;public Pearl(Beverage beverage) {this.mBeverage = beverage;}@Overridepublic String getDescription() {return "Pearl-" + mBeverage.getDescription();}@Overridepublic double cost() {return 2 + mBeverage.cost();}}
测试类
package com.hpg.demo;public class TestMain {public static void main(String args[]){//原味茶Beverage tea =new Tea();System.out.println(tea.getDescription()+" ¥"+tea.cost());//奶茶,用牛奶装饰茶Beverage milkTea = new Milk(tea);System.out.println(milkTea.getDescription()+" ¥"+milkTea.cost());//珍珠奶茶,用珍珠装饰奶茶Beverage pearlMilkTea = new Pearl(milkTea);System.out.println(pearlMilkTea.getDescription()+" ¥"+pearlMilkTea.cost());}}
运行结果
Tea ¥3.0
Milk-Tea ¥5.0
Pearl-Milk-Tea ¥7.0
0 0
- JAVA设计模式温故篇-装饰者模式
- JAVA设计模式温故篇-观察者模式
- JAVA设计模式温故篇-工厂模式
- Java设计模式-装饰者设计模式
- java设计模式---装饰者设计模式
- Java 装饰者设计模式
- Java设计模式--装饰者
- Java设计模式:装饰者模式(Decorator)
- java设计模式之装饰者模式
- 【Java设计模式】装饰者模式
- Java设计模式之装饰者模式
- JAVA系列-设计模式-装饰者模式
- java设计模式之装饰者模式
- Java 设计模式 装饰者模式
- Java设计模式之装饰者模式
- Java设计模式之装饰者模式
- java设计模式------装饰者模式
- Java设计模式之装饰者模式
- animation动画的基础知识
- Oracle并行执行
- 云计算时代,对服务器的要求与改变
- Poj 1129 Channel Allocation(Dfs剪枝)
- 【Javascript】模块化编程笔记
- JAVA设计模式温故篇-装饰者模式
- sun.misc.unsafe类的使用(转载)
- 面向对象第十六课,抽象类,抽象方法
- Grails启动问题及处理
- sourcesight 与 pc_lint集成方法
- 深入理解计算机网络学习笔记--TCP
- 支付宝红包首秀失利
- 教你用Django实现一个简单的GIS功能
- Linux平台编译curl7.37.1(32位、64位)