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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章