设计模式学习3——装饰者模式(Decorator)

       没想到鼻炎还要做手术,这应该是出生到现在的第一个手术吧,据说是个小手术,呵呵,应该没有什么问题吧,不过得有10天左右的手术及休养时间,不知道设计模式的学习会不会被打断,嘿嘿。

装饰者模式
    
      官方解释:……

      个人理解:如果要把多个类组合在一起,形成新的对象,除了使用继承然后多态,使用装饰者模式更加合适,不过据说这样的话,会出现很多的小类,导致代码的可理解性变差……

      小实例: 技术支持中心的“老成员”们都有一起吃鸡蛋炒拉面的经历,这不,拉面店的老板要把他的生意“信息化、自动化”。拉面店大约有三四十种拉面吧,其中拉面都是一样的,只不过放进的佐料不同而已,比如:牛肉炒拉面、鸡蛋炒碰面等等。这情形最适合装饰者模式了。 画个图吧
 
 

      上面的图是HeadFirst电子书里的,自己偷了个小懒,没有重新去画,于是上面的图只是介绍装饰者模式的,和下面的代码原理一样,不过不是下面代码的类图:

package component;

public class Lamian extends Mian {

    
public float UseTime() {
        
return 30;
    }


}

//-------下面是另一个文件了,这就是component


package component;

public abstract class Mian {
    String name;
    
public String getName() {
        
return name;
    }

    
public abstract float UseTime();
}



    装饰者们的代码:

装饰者


        测试一下吧:

测试


         测试结果截图:
      
posted @ 2008-05-27 13:10 张玉峰 阅读(73) 评论(2)  编辑 收藏 所属分类: ×设计模式×

  回复  引用  查看    
#1楼 2008-06-15 10:34 | 超少      
我想在拉面店要一份拉面加俩鸡蛋要辣椒

Lamian mylamian = new Lamian();
mylamian=new Egg(mylamian);
mylamian=new Egg(mylamian);
mylamian=new ljiao(mylamian);

this.label1.Text = "吃一份拉面加俩鸡蛋要辣椒用时间" + mylamian.UseTime().ToString()+"分钟";
  回复  引用  查看    
#2楼 2008-06-16 09:56 | 超少      
如果拉面店的老板要把他的生意多元化,又卖大饼了。
//被装饰类
public class dabing:Lamian
{
//假设吃一张大饼要20分钟
public override float UseTime()
{
return 20;

}
}


我想在拉面店要一份大饼加俩鸡蛋要辣椒

Lamian mydabing= new dabing();
mydabing=new Egg(mydabing);
mydabing=new Egg(mydabing);
mydabing=new ljiao(mydabing);





标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-05-27 13:17 编辑过


相关链接: