【裝飾模式應用場景舉例】
比如在玩
從圖中可以看到使用繼承來實現這種功能
顯然繼承
那麼如何才能以
【裝飾模式解釋】
類型
動態的對一個對象進行功能上的擴展
【裝飾模式UML圖】
【裝飾模式
新建一個抽象汽車父類
package car_package;
public abstract class car_parent {
// 汽車抽象父類
private String make_address;
private int speed;
public String getMake_address() {
return make_address;
}
public void setMake_address(String make_address) {
this
}
public int getSpeed() {
return speed;
}
public void setSpeed(int speed) {
this
}
public abstract void print_face();
}
然後新建一個奧迪汽車子類
package car_package;public class audi_sub extends car_parent {
// 奧迪汽車子類
@Override
public void print_face() {
System
}
}
然後再新建一個裝飾者父類
import car_package
public abstract class decorator_parent extends car_parent {
// 裝飾者父類
protected car_parent car_parent_ref;
public void setCar_parent_ref(car_parent car_parent_ref) {
this
}
@Override
public void print_face() {
car_parent_ref
}
}
然後再新建裝飾者子類
public class decorator_audi_red extends decorator_parent {
@Override
public void print_face() {
super
System
}
}
然後再新建裝飾者子類
public class decorator_audi_purple extends decorator_parent {
@Override
public void print_face() {
super
System
}
}
新建一個運行類
package main_run;import car_package
import decorator_package
import decorator_package
public class main_run {
public static void main(String[] args) {
audi_sub audi_sub_ref = new audi_sub();
audi_sub_ref
audi_sub_ref
decorator_audi_red decorator_audi_red_ref = new decorator_audi_red();
decorator_audi_red_ref
decorator_audi_purple decorator_audi_purple_ref = new decorator_audi_purple();
decorator_audi_purple_ref
decorator_audi_purple_ref
}
}
程序運行結果如下
給 奧迪 噴塗鴉
給 奧迪 噴塗鴉
從程序結構中可以看到
【裝飾模式
裝飾模式decorator示例代碼
From:http://tw.wingwit.com/Article/program/Java/gj/201311/27520.html