博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 装饰模式 (Decorator)
阅读量:6720 次
发布时间:2019-06-25

本文共 2090 字,大约阅读时间需要 6 分钟。

装饰模式

动态的将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的取代方案

这里写图片描写叙述

代码

package gx.component;/** * 组件:装饰类和被装饰类 都要继承:为了类型保持一致 * @author always * */public abstract class Component {
public abstract void description(); public abstract int cost();}
package gx.component.impl;import gx.component.Component;/** * 装饰类的抽象类 * @author always * */public abstract class  Decorator extends Component{
protected Component component;}
package gx.component.impl;import gx.component.Component;/** *  * 被包装的类 * @author always * */public class Phone extends Component{
public void description() { System.out.println("裸机"); } public int cost() { return 1900; }}
package gx.decorator.impl;import gx.component.Component;import gx.component.impl.Decorator;/** *  * 装饰1:给手机买个壳 * @author always * */public class DaiKe extends Decorator{
public DaiKe(){ } public DaiKe(Component component){ this.component=component; } public void description() { this.component.description(); System.out.println("带了手机壳"); } public int cost() { return 50+this.component.cost(); }}
package gx.decorator.impl;import gx.component.Component;import gx.component.impl.Decorator;/** *  * 装饰2:给手机贴个膜 * @author always * */public class TieMo extends Decorator{
public TieMo(){} public TieMo(Component component){ this.component=component; } public void description() { this.component.description(); System.out.println("贴了膜"); } public int cost() { return 20+this.component.cost(); }}

測试类:

package gx;import gx.component.Component;import gx.component.impl.Phone;import gx.decorator.impl.DaiKe;import gx.decorator.impl.TieMo;import junit.framework.TestCase;public class TestDecorator extends TestCase {
public void testDecorator() { Component component = new TieMo(new DaiKe(new Phone())); component.description(); System.out.println("价钱:" + component.cost()); /* * 结果: * 裸机 * 带了手机壳 * 贴了膜 * 价钱:1970 */ }}
你可能感兴趣的文章
使用MaxCompute Java SDK 执行任务卡住了,怎么办?
查看>>
《鹿鼎记》的第一遍读后感作文3600字
查看>>
66.添加自定义监控项目 配置邮件告警与测试及处理问题
查看>>
阿里云应用高可用服务公测发布
查看>>
芯片、半导体和集成电路之间的区别是什么?
查看>>
圣诞要礼物手势大全,礼物在哪里?
查看>>
OSChina 周日乱弹 ——我自己能发呆到世界毁灭
查看>>
OSChina 周二乱弹 —— 好好告别啊!不要舌吻!
查看>>
使用Cygwin和 mingw 安装 python paramiko模块
查看>>
前端那些事之hack篇
查看>>
结合COMSOL,浅谈多场耦合
查看>>
开发人员学Linux(2):VirtualBox中安装CentOS7系统设置
查看>>
HttpURLConnection原生JAVA http請求
查看>>
CentOS/Linux 开放80、8080端口或者开放某个端口
查看>>
Storm配置属性和操作命令
查看>>
react-native-scrollable-tab-view 自定制 tabBar
查看>>
Oracle执行计划 SQL语句执行效率问题查找与解决方法
查看>>
Android ViewFlipper触摸动画
查看>>
开发小组
查看>>
QSsh之SshConnection类
查看>>