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

你可能感兴趣的:(Java设计模式_装饰者模式)