博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式--装饰模式
阅读量:7259 次
发布时间:2019-06-29

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

hot3.png

装饰模式(decorator,别名Wrapper):

给一个对象增加一些新的功能,而且是动态的,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例。

装饰器模式的应用场景:

1.需要扩展一个类的功能。2.动态的为一个对象增加功能,而且还能动态撤销。

装饰器模式的缺点:

1.产生过多相似的对象,不易排错

示例:

装饰者模式测试类GirlDecoratorTest.java

/** * 装饰者模式测试类 * * @author Kevin * @date 2016-3-15 */public class GirlDecoratorTest {	public static void main(String[] args) {		ChineseGirlImpl girl = new ChineseGirlImpl();		GirlDecoratorImpl decorator = new GirlDecoratorImpl(girl);		decorator.description();	}}

描述接口类Description.java

/** * 描述接口 * * @author Kevin * @date 2016-3-15 */public interface Description {	/**	 * 描述	 *	 * @author Kevin	 */	 void description();}

中国女孩类(被装饰类)ChineseGirlImpl.java

/** * 中国女孩类(被装饰类) * * @author Kevin * @date 2016-3-15 */public class ChineseGirlImpl implements Description {	@Override	public void description() {		System.out.println("ChineseGirl goodness");	}}

女孩装饰类(装饰类,可以为被装饰类添加功能)GirlDecoratorImpl.java

/** * 女孩装饰类(装饰类,可以为被装饰类添加功能) * * @author Kevin * @date 2016-3-15 */public class GirlDecoratorImpl implements Description {	/* 中国女孩类(被装饰类) */	private ChineseGirlImpl chineseGirl;	public GirlDecoratorImpl() {	}	public GirlDecoratorImpl(ChineseGirlImpl chineseGirl) {		this.chineseGirl = chineseGirl;	}	@Override	public void description() {		System.out.println("before decorator");		chineseGirl.description();		System.out.println("after decorator");		System.out.println("chineseGirl goodness and beautiful");	}}

转载于:https://my.oschina.net/zhaokaiju/blog/654910

你可能感兴趣的文章
BZOJ3530[Sdoi2014]数数——AC自动机+数位DP
查看>>
Ubuntu 安装 TexLive 2011,2010,2009 详细步骤
查看>>
彻底解决android API 不兼容问题
查看>>
方格取数
查看>>
类加载器的工作原理
查看>>
wp7中如何获取设备ID和用户ID
查看>>
1.6站立会议
查看>>
[转载]Javassist 使用指南(二)
查看>>
sudo命令详解
查看>>
Thread.start||Thread.run
查看>>
启动画面坚持多久?
查看>>
关于面试
查看>>
三八二十四
查看>>
深入理解Activity之-----Activity的生命周期与加载模式(一)
查看>>
1003. 我要通过!(20)
查看>>
Python数据库连接池DBUtils
查看>>
版本冲突
查看>>
Apache Airavata 0.6 发布
查看>>
Scala面向对象详解
查看>>
数据库设计第一、第二、第三范式
查看>>