Java设计模式_装饰者模式

概念

  • 在不改变原类文件以及不使用继承的情况下,动态地将责任附加到对象上,从而实现动态拓展的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象.

设计原则

  • 要使用装饰者模式,需要满足以下设计原则
    * 多用组合,少用继承
    * 开放_关闭原则:类应该对拓展开放,对修改关闭.

下面以汉堡为例

public interface Hanbeger {
    //价钱
    public float price();
    //名字
    public String name();

}
//被装饰者
public class GoldHanbeger implements Hanbeger{

    @Override
    public float price() {
       return 10;
    }

    @Override
    public String name() {
        
        return "黄金馒头";
    }
   
}

public abstract class peicai implements Hanbeger{
    
     private Hanbeger hanbeger;
     
     
     public peicai(Hanbeger h){
         this.hanbeger = h;
         
     }
      @Override
    public String name() {
        
        return this.hanbeger.name();
    }
     @Override
    public float price() {
        
        return this.hanbeger.price();
    }
}
public class Shengcai extends peicai{

    public Shengcai(Hanbeger h) {
        super(h);
        
    }
    @Override
    public float price() {
        
        return super.price()+5;
    }
    @Override
    public String name() {
        
        return super.name()+"加生菜";
    }

}
//牛肉
public class Beff extends peicai {

    public Beff(Hanbeger h) {
        super(h);
        
    }
    @Override
    public String name() {
        
        return super.name()+"加牛肉";
    }
    @Override
    public float price() {
        
        return super.price()+20;
    }
    
  
}
public class Text {
   public static void main(String[] args) {
    GoldHanbeger gold = new GoldHanbeger();
    System.out.println(gold.name()+"价钱" + gold.price());
    //牛肉汉堡
    Beff beff = new Beff(gold);
    System.out.println(beff.name()+"价钱" + beff.price());
    
    //牛肉生菜汉堡
    Shengcai shencai = new Shengcai(beff);
    System.out.println(shencai.name() + "价钱" + shencai.price());
}
}

我对于这种模式理解是这样的:这就像是做菜一样,我先要确定要做什么,要有一个大致方向,在汉堡的例子里,我先确定了我要的是汉堡,这就需要定义一个汉堡接口,因为这是基本.那么在汉堡中又有很多分类像是鸡腿堡 鳗鱼堡 黄金汉堡之类的,在这里我选的是黄金汉堡.当然黄金汉堡是一个实现汉堡接口的类.在有了最基本的汉堡之后我们就需要加入一些配菜了,配菜是一个类,那么配菜也有很多种类 像是生菜 牛肉 芥末之类的,在写具体的配菜时需要继承配菜类,因为这些都属于配菜.最后就是一个测试类了,如下是运行结果:

黄金馒头价钱10.0
黄金馒头加牛肉价钱30.0
黄金馒头加牛肉加生菜价钱35.0

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 定义 装饰者模式:在不改变原类文件以及不使用继承的情况下,动态地将责任附加到对象上,从而实现动态拓展一个对象的功能...
    丶蓝天白云梦阅读 1,731评论 2 23
  • 装饰者模式:动态地将责任附加到对象上。顾名思义,装饰者模式的作用是对对象进行包装,最终得到一个自己想要的对象。简而...
    野比野比我是大雄阅读 386评论 0 1
  • 装饰者模式动态地将责任附加到对象身上。若要拓展功能,装饰者提供了比继承更有弹性的替代方案。 用过 QQ 的人都知道...
    ghwaphon阅读 1,132评论 0 1
  • 2装饰者模式 简单理解装饰者模式 装饰者模式就是在原来想做事情的接口上,在增加一些其他的想做的事情或者说其他想装饰...
    shuaidong阅读 277评论 0 0
  • 无论是离婚抑或分手都不是一朝一夕之事,而是经历了一系列的过程。 一个典型的分手脚本: 当你的亲密关系结束时,你可能...
    爱读书的李老师阅读 531评论 0 0