裝飾模式
一、什麼是裝飾模式
裝飾(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();
}
}