其组成结构:
- 1、抽象组件(接口);
- 2、具体组件(实现抽象组件);
- 3、抽象装饰类(创建构造带参构造方法,实现抽象组件方法);
- 4、具体装饰类(继承抽象装饰类,创建带参构造方法调用父类的构造方法,重写父类的方法);
例子:产品经理提出需求,程序员完成时间;
1、抽象组件(接口);
/**
* 需求
*
* @author Administrator
*
*/
interface Demand {
/**
* 需求名字
* @return
*/
String name();
/**
* 完成需求花费的时间
* @return
*/
int time();
}
2、具体组件(实现抽象组件);
/**
* 产品经理
* 实现时间需求接口
*
* @author Administrator
*
*/
class Pm implements Demand {
@Override
public String name() {
return "产品经理提出需求:";
}
@Override
public int time() {
return 0;
}
}
3、抽象装饰类(创建构造带参构造方法,实现抽象组件方法);
/**
* 程序员
* @author Administrator
*
*/
abstract class Programmer extends Pm {
private Demand demand;
public Programmer(Demand demand) {
this.demand = demand;
}
@Override
public String name() {
return this.demand.name();
}
@Override
public int time() {
return this.demand.time();
}
}
4、具体装饰类(继承抽象装饰类,创建带参构造方法调用父类的构造方法,重写父类的方法);
/**
* 支付需求
*
* @author Administrator
*
*/
class Pament extends Programmer {
public Pament(Demand demand) {
super(demand);
}
@Override
public String name() {
return super.name() + "产品经理提出加个支付需求,";
}
@Override
public int time() {
return super.time() + 5;
}
}
/**
* 列表展示需求
*
* @author Administrator
*
*/
class List extends Programmer {
public List(Demand demand) {
super(demand);
}
@Override
public String name() {
return super.name() + "产品经理提出加个列表展示,";
}
@Override
public int time() {
return super.time() + 1;
}
}
5、运行:
Demand demand = new Pm();
// 2个需求都给一个程序员做
Demand pament = new Pament(demand);
System.out.println(pament.name() + "--->程序员说:" + pament.time() + "天");
Pm list = new List(pament);
System.out.println(list.name() + "--->程序员说:" + list.time() + "天");
// 分开做
Demand pament1 = new Pament(demand);
System.out.println(pament1.name() + "--->程序员说:" + pament1.time() + "天");
Demand pament2 = new List(demand);
System.out.println(pament2.name() + "--->程序员说:" + pament2.time() + "天");
6、输出结果:
产品经理提出需求:产品经理提出加个支付需求,--->程序员说:5天
产品经理提出需求:产品经理提出加个支付需求,产品经理提出加个列表展示,--->程序员说:6天
产品经理提出需求:产品经理提出加个支付需求,--->程序员说:5天
产品经理提出需求:产品经理提出加个列表展示,--->程序员说:1天