首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

设计形式-装饰模式学习

2012-07-01 
设计模式-----装饰模式学习最近在看Head First设计模式,比较爽,通俗易懂,过了个眼隐,赶紧动手来写一个自己

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

最近在看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....

热点排行