设计模式-----装饰模式学习
最近在看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块)!");}@Overridepublic int cost() {// TODO Auto-generated method stubreturn 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元)");}@Overridepublic int cost() {// TODO Auto-generated method stubreturn 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;}@Overridepublic String getDescription() {// TODO Auto-generated method stubreturn animal.getDescription()+"+切一下需要加收一块钱!";}@Overridepublic int cost() {// TODO Auto-generated method stubreturn 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;}@Overridepublic String getDescription() {// TODO Auto-generated method stubreturn animal.getDescription()+"+煮一下需要加收5元!";}@Overridepublic int cost() {// TODO Auto-generated method stubreturn 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 stubAnimal 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....