最近在看Head First设计模式,比较爽,通俗易懂,过了个眼隐,赶紧动手来写一个自己的装饰模式,以便学以至用。
1。建立抽象动物类,猪肉类实现动物类,鸭肉实现动物类,
2。建立抽象动物处理类,并实现具体动物处理类(暂时就先切,煮吧)
代码如下:
1。动物抽象类:
/**
*@author liudonggan Email:ldg123456@sina.com
*@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:ldg123456@sina.com
*@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:ldg123456@sina.com
*@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:ldg123456@sina.com
*@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:ldg123456@sina.com
*@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:ldg123456@sina.com
*@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:ldg123456@sina.com
*@date 2011-7-6 下午02:36:26
*@version v1.0
**/
public class Test {
/**
* main 方法
* <p>方法说明:</p>
* @param args
* @return void
* @author liudonggan Email:ldg123456@sina.com
* @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....