(七)裝飾模式

裝飾模式

一、什麼是裝飾模式

裝飾(Decorator)模式又叫做包裝模式。通過一種對客戶端透明的方式來擴展對象的功能,是繼承關係的一個替換方案。

二、裝飾模式的結構


三、裝飾模式的角色和職責

抽象組件角色: 一個抽象接口,是被裝飾類和

裝飾類的父接口。

具體組件角色:爲抽象組件的實現類。

抽象裝飾角色:包含一個組件的引用,並定義了

與抽象組件一致的接口。

具體裝飾角色:爲抽象裝飾角色的實現類。負責

具體的裝飾

四、代碼

package org.fbm.decorator;

public interface MobilePhone {
	public void call();
	public void show();
}

package org.fbm.decorator;

public class OrdinaryMobilePhone implements MobilePhone {
	public void call() {
		System.out.println("普通手機打電話的功能");
	}
	public void show() {
		this.call();
	}
}

package org.fbm.decorator;

public abstract class Decorator implements MobilePhone {
    private MobilePhone mobilePhone;
    public Decorator(MobilePhone mobilePhone){
    	this.mobilePhone=mobilePhone;
    }
	public MobilePhone getMobilePhone() {
		return mobilePhone;
	}


	public void setMobilePhone(MobilePhone mobilePhone) {
		this.mobilePhone = mobilePhone;
	}


	public abstract void show();

}
package org.fbm.decorator;

public class ColorMobilePhone extends Decorator {

	public ColorMobilePhone(MobilePhone mobilePhone) {
		super(mobilePhone);
	}


	public void call() {
	}

   public void photograph(){
	   System.out.println("彩屏手機可以拍照");
   }
	
	public void show() {
       this.getMobilePhone().show();
       this.photograph();
	}

}

package org.fbm.decorator;

public class SmartMobilePhone extends Decorator {

	public SmartMobilePhone(MobilePhone mobilePhone) {
		super(mobilePhone);
	}

	public void call() {
		
	}

	public void Internet(){
		System.out.println("智能手機可以上網");
	}
	public void show() {	
		this.getMobilePhone().show();
		this.Internet();
	}

}

package org.fbm.decorator;

public class MainClass {
	public static void main(String[] args) {
		System.out.println("-----------------普通手機-------------------");
		MobilePhone omp=new OrdinaryMobilePhone();
		omp.show();
		System.out.println("-----------------彩屏手機-------------------");
		MobilePhone cmp=new ColorMobilePhone(omp);
		cmp.show();
		System.out.println("-----------------智能手機-------------------");
		MobilePhone smp=new SmartMobilePhone(cmp);
		smp.show();
	}
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章