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