设计模式-----装饰模式学习

最近在看Head First设计模式,比较爽,通俗易懂,过了个眼隐,赶紧动手来写一个自己的装饰模式,以便学以至用。

1。建立抽象动物类,猪肉类实现动物类,鸭肉实现动物类,

2。建立抽象动物处理类,并实现具体动物处理类(暂时就先切,煮吧)

代码如下:

   1。动物抽象类:

/**
 *@author liudonggan Email:[email protected]
 *@date 2011-7-6 下午02:23:51
 *@version v1.0
 **/
public abstract class Animal {

	private String description;
	
	public String getDescription() {
		return description;
	}

	public void setDescription(String description) {
		this.description = description;
	}

	public abstract int cost();
}

 2.猪肉实现类(extends Animal)

/**
 *@author liudonggan Email:[email protected]
 *@date 2011-7-6 下午02:28:15
 *@version v1.0
 **/
public class PigAnimal extends Animal {

	public PigAnimal()
	{
		super.setDescription("我买了一块猪肉(价格20块)!");
	}
	@Override
	public int cost() {
		// TODO Auto-generated method stub
		return 20;
	}

}

 3。鸭肉实现类(extends Animal)

    

/**
 *@author liudonggan Email:[email protected]
 *@date 2011-7-6 下午02:27:17
 *@version v1.0
 **/
public class DuckAnimal extends Animal {

	public DuckAnimal()
	{
		super.setDescription("我买了一块鸭肉(价格12元)");
	}
	@Override
	public int cost() {
		// TODO Auto-generated method stub
		return 12;
	}

}

4.动物处理抽象类(extends Animal)

  

/**
 *@author liudonggan Email:[email protected]
 *@date 2011-7-6 下午02:30:00
 *@version v1.0
 **/
public abstract class ProcessAnimal extends Animal {

	public abstract String getDescription();

}

5。切处理类(extends ProcessAnimal)

 

/**
 *@author liudonggan Email:[email protected]
 *@date 2011-7-6 下午02:31:36
 *@version v1.0
 **/
public class CutProcessAnimal extends ProcessAnimal {

	private Animal animal;
	
	public  CutProcessAnimal(Animal animal) {
		this.animal=animal;
	}
	@Override
	public String getDescription() {
		// TODO Auto-generated method stub
		return animal.getDescription()+"+切一下需要加收一块钱!";
	}

	@Override
	public int cost() {
		// TODO Auto-generated method stub
		return animal.cost()+1;
	}

}

6.煮处理类(extends ProcessAnimal)

/**
 *@author liudonggan Email:[email protected]
 *@date 2011-7-6 下午02:34:59
 *@version v1.0
 **/
public class CookProcessAnimal extends ProcessAnimal {

	private Animal animal;
	
	public  CookProcessAnimal(Animal animal) {
		this.animal=animal;
	}


	@Override
	public String getDescription() {
		// TODO Auto-generated method stub
		return animal.getDescription()+"+煮一下需要加收5元!";
	}

	@Override
	public int cost() {
		// TODO Auto-generated method stub
		return animal.cost()+5;
	}

}

 7.测试类:

/**
 *@author liudonggan Email:[email protected]
 *@date 2011-7-6 下午02:36:26
 *@version v1.0
 **/
public class Test {

	/**
	 * main 方法
	 * <p>方法说明:</p>
	 * @param args
	 * @return void
	 * @author liudonggan Email:[email protected]
	 * @date 2011-7-6 下午02:36:26
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Animal animal=new PigAnimal();
		System.out.println(animal.getDescription());
		System.out.println("我需要切切,正在切....");
		animal=new CutProcessAnimal(animal);
		System.out.println(animal.getDescription());
		System.out.println("合计:"+animal.cost()+"元");
		System.out.println("我需要煮熟了,正在煮....");
		animal=new CookProcessAnimal(animal);
		System.out.println(animal.getDescription());
		System.out.println("合计:"+animal.cost()+"元");
		
	}

}

 8。代码运行结果如下:

我买了一块猪肉(价格20块)!
我需要切切,正在切....
我买了一块猪肉(价格20块)!+切一下需要加收一块钱!
合计:21元
我需要煮熟了,正在煮....
我买了一块猪肉(价格20块)!+切一下需要加收一块钱!+煮一下需要加收5元!
合计:26元

到此为止已经完成了一个简单的装饰模式,希望以后在项目中应用自如。Fighting....

猜你喜欢

转载自zhy584520.iteye.com/blog/1117046