類型:結構模式
動態的對一個對象進行功能上的擴展,也可以對其子類進行功能上的擴展。
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.make_address = make_address;
}
public int getSpeed() {
return speed;
}
public void setSpeed(int speed) {
this.speed = speed;
}
public abstract void print_face();
}
然後新建一個奧迪汽車子類
package car_package;
public class audi_sub extends car_parent {
// 奧迪汽車子類
@Override
public void print_face() {
System.out.println("audi車默認的顏色爲 黑色");
}
}
然後再新建一個裝飾者父類:
package decorator_package;
import car_package.car_parent;
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.car_parent_ref = car_parent_ref;
}
@Override
public void print_face() {
car_parent_ref.print_face();
}
}
然後再新建裝飾者子類:紅色火焰裝飾者類:
package decorator_package;
public class decorator_audi_red extends decorator_parent {
@Override
public void print_face() {
super.print_face();
System.out.println("給 奧迪 噴塗鴉 - 顏色爲 紅色火焰");
}
}
然後再新建裝飾者子類:紫色霞光裝飾者類:
package decorator_package;
public class decorator_audi_purple extends decorator_parent {
@Override
public void print_face() {
super.print_face();
System.out.println("給 奧迪 噴塗鴉 - 顏色爲 紫色霞光");
}
}
新建一個運行類
package main_run;
import car_package.audi_sub;
import decorator_package.decorator_audi_purple;
import decorator_package.decorator_audi_red;
public class main_run {
public static void main(String[] args) {
audi_sub audi_sub_ref = new audi_sub();
audi_sub_ref.setMake_address("北京市朝陽區");
audi_sub_ref.setSpeed(200);
decorator_audi_red decorator_audi_red_ref = new decorator_audi_red();
decorator_audi_red_ref.setCar_parent_ref(audi_sub_ref);
decorator_audi_purple decorator_audi_purple_ref = new decorator_audi_purple();
decorator_audi_purple_ref.setCar_parent_ref(decorator_audi_red_ref);
decorator_audi_purple_ref.print_face();
}
}
package decorator;
public interface Component{
public void setName(String aName);
public String getName();
}
ConcreteComponent代碼:
package decorator;
public class ConcreteComponent implements Component{
String name;
public void setName(String aName){
name = aName;
}
public String getName(){
return name;
}
}
Decorator代碼:
package decorator;
public class Decorator implements Component{
private Component component;
public Decorator(Component c){
component = c;
}
public void setName(String aName){
component.setName(aName);
}
public String getName(){
return "Name :"+component.getName();
}
}
Client代碼
package decorator;
public class Client {
public static void main(String[] args){
Component c= new ConcreteComponent();
Component d = new Decorator(c);
c.setName("Lili");
System.out.println(c.getName());
d.setName("Lili");
System.out.println(d.getName());
}
}