《设计模式》之装饰器模式
2019-11-01 09:59:37来源:博客园 阅读 ()
《设计模式》之装饰器模式
装饰器模式
装饰器模式中主要有两个角色:
- 装饰器(夹克,帽子)
- 被装饰的对象(老王)
装饰器和被装饰的对象有两个特点,也是装饰器模式的关键:
- 他们实现同一个接口
- 装饰器中使用了被装饰的对象
使用:
/**
* <p>
*定义一个接口
* </p>
*
* @author aodeng-低调小熊猫
* @since 19-7-11
*/
public interface Person {
/**
* 计算累计消费
* @return
*/
public Double cost();
/**
* 输出信息
*/
public void show();
}
/**
* <p>
*老王( 被装饰的对象 )实现定义的接口
* </p>
*
* @author aodeng-低调小熊猫
* @since 19-7-11
*/
public class LaoWang implements Person{
@Override
public Double cost() {
//没消费,消费为0
return 0.0;
}
@Override
public void show() {
System.out.println("老王我现在消费"+this.cost());
}
}
/**
* <p>
*装饰器超类,和被装饰的对象实现同一个接口 Person :
* </p>
*
* @author aodeng-低调小熊猫
* @since 19-7-11
*/
public abstract class ClothesDecorator implements Person{
/**
* 装饰器中要使用被装饰器的对象,构造方法中传入
*/
protected Person person;
public ClothesDecorator(Person person){
this.person=person;
}
}
/**
* <p>
*具体的装饰,夹克
* </p>
*
* @author aodeng-低调小熊猫
* @since 19-7-11
*/
public class Jacket extends ClothesDecorator{
public Jacket(Person person){
/**
* super 指向自己超(父)类
*/
super(person);
}
@Override
public Double cost() {
//消费一件夹克
return person.cost()+100;
}
@Override
public void show() {
person.show();
System.out.println("老王我现在又消费了一件夹克100,累计用了"+this.cost());
}
}
/**
* <p>
*具体的装饰,帽子
* </p>
*
* @author aodeng-低调小熊猫
* @since 19-7-11
*/
public class Hat extends ClothesDecorator{
public Hat(Person person){
//指向自己超(父)类
super(person);
}
@Override
public Double cost() {
return person.cost()+200;
}
@Override
public void show() {
person.show();
System.out.println("老王我现在又消费了一件帽子200,累计用了"+this.cost());
}
}
测试
/**
* <p>
*程序入口
* </p>
*
* @author aodeng-低调小熊猫
* @since 19-7-11
*/
public class LearnMain {
public static void main(String[] args) {
//创建一个老王
Person laoWang=new LaoWang();
//老王买了一件夹克
laoWang=new Jacket(laoWang);
//老王买了一个帽子
laoWang=new Hat(laoWang);
laoWang.show();
/*
控制台输出:
老王我现在消费0.0
老王我现在又消费了一件夹克100,累计用了100.0
老王我现在又消费了一件帽子200,累计用了300.0*/
}
}
源码
源码地址:https://github.com/java-aodeng/hope
Links:
- CI/CD 流程以及原理说明
- Github
- 熊猫哥星球基地
- 欢迎关注公众号【低调小熊猫】
本文由低调小熊猫一文多发操作发布! 欢迎关注公众号:低调小熊猫
原文链接:https://www.cnblogs.com/aodeng/p/11777220.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:最简破解-java代码热加载热部署IDEA插件JRebel
下一篇:Dubbo笔记
- 设计模式-委派/策略模式 2020-06-09
- 深入理解:设计模式中的七大设计原则 2020-06-07
- 设计模式---类之间的关系知多少 2020-06-07
- 你与面试官所了解的单例模式并不一样! 2020-06-06
- 高手眼中的观察者模式有什么不一样 2020-06-05
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash