Java 装饰设计模式

装饰设计模式是对已经存在的对象增加新的功能,相比继承不会那么臃肿

 

首先定义一个接口,手机最基本的功能打电话

public interface Mobile {
	public void call();
}


定义抽象的装饰类实现Mobile接口

public abstract class MobileDecorate implements Mobile {

	private Mobile moblie;

	public MobileDecorate(Mobile moblie) {
		this.moblie = moblie;
	}

	@Override
	public void call() {
		this.moblie.call();
	}
}


手机最基本的功能打电话的类

/**
 * 手机最基本的功能
 */
public class MobileCall implements Mobile {

	@Override
	public void call() {
		System.out.println("手机可以打电话");
	}

}

 

增强功能的类--听MP3 要继承装饰类MobileDecorate

/**
 * 手机听MP3类
 */
public class MobileMp3 extends MobileDecorate{

	public MobileMp3(Mobile moblie) {
		super(moblie);
	}

	@Override
	public void call() {
		super.call();
		System.out.println("手机听MP3");
	}
}

增强功能的类--看电影 要继承装饰类MobileDecorate

/**
 * 手机看电影类
 */
public class MobileMovie extends MobileDecorate{

	public MobileMovie(Mobile moblie) {
		super(moblie);
	}
	@Override
	public void call() {
		super.call();
		System.out.println("用手机看电影");
	}
}

测试类

	public static void main(String[] args) {
		//普通手机
		Mobile 小灵通 = new MobileCall();
		小灵通.call();
		
		System.out.println("----------------");
		//增加MP3功能的手机(传原有的对象)
		MobileDecorate mobileDecorate = new MobileMp3(小灵通);
		mobileDecorate.call();
		
		System.out.println("----------------");
		//增加播放电影功能手机(传原有的对象)
		mobileDecorate = new MobileMovie(小灵通);
		mobileDecorate.call();
		
		System.out.println("----------------");
		//增加MP3和播放电影功能手机(无需新建MP3功能和电影功能的类)
		mobileDecorate = new MobileMovie(new MobileMp3(小灵通));
		mobileDecorate.call();
	}

执行结果:

手机可以打电话
----------------
手机可以打电话
手机听MP3
----------------
手机可以打电话
用手机看电影
----------------
手机可以打电话
手机听MP3
用手机看电影


 

发布了52 篇原创文章 · 获赞 12 · 访问量 10万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章