装饰模式实例复杂的奖金计算

package A;

public abstract class Component {

public abstract double pay();

}
package A;

public class Person extends Component {

	private String name;
	private String position;
	
	public Person() {
	}

	public Person(String name, String position) {
		
		this.name = name;
		this.position = position;
	}
   
	public double pay() {
		System.out.print(position+name+"累计奖金为");
		return 0;
	}

}
package A;

public class Wage extends Component {

	protected Component component;
	public void Decorator(Component component)
	{this.component=component;

}
	public double pay()
	{if(component!=null)
		return component.pay();
	else
		return 0;
	}
}
package A;

public class Month extends Wage {
private double money;

public Month() {
	
}

public Month(double money) {
	
	this.money = money;
}

public double pay()//月奖金
{System.out.print("月奖金 "+money+"元 ");
	return super.pay()+money;
}
}
package A;

public class Increase extends Wage{
	private double yewue;
	
	public Increase() {
	
	}

	public Increase(double yewue) {
	
		this.yewue = yewue;
	}

	public double pay()
	{System.out.print("个人业务增长奖金 "+yewue*0.2+"元 ");
	return super.pay()+1000*0.3;
	}
}
package A;

public class Team extends Wage {
	private double money;
	
public Team() {
		
	}

public Team(double money) {
	
		this.money = money;
	}

public double pay()
{System.out.print("团队增长奖金"+money+"元 ");
return super.pay()+money;
}
}
package A;

public class TeamIncrease extends Wage {
	private double zengzhang;
	
public TeamIncrease() {
		
	}

public TeamIncrease(double zengzhang) {
		
		this.zengzhang = zengzhang;
	}

public double pay()
{System.out.print("团队增长奖金"+zengzhang*0.5+"元 ");
return super.pay()+zengzhang*0.5;
}
}
package A;

public class Test {
public static void main(String args[])
{Person xc=new Person("小李","程序员");
Person xd=new Person("老王","团队经理");
Month mo=new Month(3000);
Increase in=new Increase(1500);
mo.Decorator(xc);
in.Decorator(mo);
Team tm=new Team(5000);
TeamIncrease ti=new TeamIncrease(2000);
tm.Decorator(xd);
ti.Decorator(tm);
System.out.println(in.pay()+"元");
System.out.println(ti.pay()+"元");
}
}

猜你喜欢

转载自blog.csdn.net/sdauguanweihong/article/details/88956384