设计形式-装饰模式学习
设计模式-----装饰模式学习
最近在看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....