Decorator装饰模式【Media版】

VideoDecorator

 

理解聚集关系在代码中的体现。

 

package decorator_media;

public interface IMedia {
	public void Play();
}

 

package decorator_media;

public abstract class VideoMedia implements IMedia {
	public abstract void Play();
}

 

package decorator_media;

public class RM extends VideoMedia {

	@Override
	public void Play() {
		System.out.println("Play VideoMedia with the type of RM");
	}
}

 

package decorator_media;

public class MPEG extends VideoMedia {

	@Override
	public void Play() {
		System.out.println("Play VideoMedia with the type of MPEG");
	}
}

 

package decorator_media;

public abstract class VideoDecorator extends VideoMedia{

	private VideoMedia videoMedia;
	
	public VideoDecorator(VideoMedia _videoMedia) {
		this.videoMedia = _videoMedia;
	}
	
	public void Play(){
		this.videoMedia.Play();
	}
}

 

package decorator_media;

public class CopyRightVideoDecorator extends VideoDecorator {

	private CopyRight copyRight;

	public CopyRightVideoDecorator(VideoMedia _videoMedia) {
		super(_videoMedia);
	}
	
	public CopyRight getCopyRight() {
		return copyRight;
	}

	public void setCopyRight(CopyRight copyRight) {
		this.copyRight = copyRight;
	}

	public void Play(){
		super.Play();
		System.out.println(this.copyRight.getInfomation());
	}
}

 

package decorator_media;

public class CopyRight {

	private String infomation = "Copyright © 2010 Eric. All rights reserved.";

	public String getInfomation() {
		return infomation;
	}

	public void setInfomation(String infomation) {
		this.infomation = infomation;
	}
}

 

 

 

通过本例,我们可以看到Decorator模式与对象的Adapter模式的区别。

实现的区别:

1 Decorator抽象类应继承要装饰的类,同时又聚合该类的实例对象;而对象的Adapter模式则只聚合,不继承;

2 Decor模式并没有引入新的接口,除非要装饰的行为需要使用该接口;而对象的Adapter模式则引入了新的接口,以此来装配原有的对象,使其具有了新接口的方法;

 

因此,适用的场景也就有所不同:

1 Decorator模式如其名,一般并不提供新的行为,而是在原有的行为上进行补充,即装饰的含义。

2 Adapter模式则是为对象引入新的行为,使其匹配新的接口,即为适配的意义所在。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值