1.定義:
在不必改變原類文件和使用繼承的情況下,動態地擴展一個對象的功能。它是通過創建一個包裝對象,也就是裝飾來包裹真實的對象。
2.設計原則:
3.UML類圖
4.實例代碼:
抽象類 Brid
package desiner23.Decorator;
public interface Brid {
public int fly();
}
實體類1 鳥1號,現在可飛50m
package desiner23.Decorator;
public class Brid1 implements Brid {
public int flyInstance = 50;
public Brid1(int flyInstance) {
super();
this.flyInstance = flyInstance;
}
public int getFlyInstance() {
return flyInstance;
}
public void setFlyInstance(int flyInstance) {
this.flyInstance = flyInstance;
}
@Override
public int fly() {
// TODO Auto-generated method stub
return this.flyInstance;
}
}
鳥2號
package desiner23.Decorator;
public class Brid2 implements Brid {
private int flydistance ;
public Brid2(int flydistance) {
super();
this.flydistance = flydistance;
}
@Override
public int fly() {
// TODO Auto-generated method stub
return this.flydistance;
}
}
裝飾抽象類 BridDecoratorAbs
package desiner23.Decorator;
public class BridDecoratorAbs implements Brid {
public Brid brid;
public int addFlyDistance;
public BridDecoratorAbs(){
}
public BridDecoratorAbs(Brid brid, int addFlyDistance) {
super();
this.brid = brid;
this.addFlyDistance = addFlyDistance;
}
@Override
public int fly() {
// TODO Auto-generated method stub
return 0;
}
}
裝飾實例1
package desiner23.Decorator;
public class BridDecoratorOne extends BridDecoratorAbs {
// private int addFlyDistance;
public BridDecoratorOne(){
}
public BridDecoratorOne(Brid brid,int addFlyDistance){
this.brid= brid;
this.addFlyDistance = addFlyDistance;
}
@Override
public int fly() {
return this.brid.fly()+this.addFlyDistance;
}
}
裝飾實例2
package desiner23.Decorator;
public class BridDecoratorTwo extends BridDecoratorAbs {
public BridDecoratorTwo() {
super();
// TODO Auto-generated constructor stub
}
public BridDecoratorTwo(Brid brid, int addFlyDistance) {
super(brid, addFlyDistance);
// TODO Auto-generated constructor stub
}
@Override
public int fly() {
return this.brid.fly()+this.addFlyDistance;
}
}
測試package desiner23.Decorator;
public class Testr {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Brid brid1 = new Brid1(20);
Brid brid2 = new Brid2(25);
Brid brid3 = new BridDecoratorOne(brid1,24);
Brid brid4 = new BridDecoratorTwo(brid2,50);
Brid brid5= new BridDecoratorTwo(brid3,50);
System.out.println(brid3.fly());
System.out.println(brid4.fly());
System.out.println(brid5.fly());
}
}
輸出:
44
75
94