装饰者模式

定义一个面包类:

public class Bread {

    public  int cost()
    {
        return 4;
    }
}

定义一个肉包,它是继承了面包的:

public class Mealbread extends  Bread{

    @Override
    public int cost() {
        return super.cost()+5;
    }
}

定义要添加的蔬菜fruit:

public class fruit extends Bread{
    private Bread b;

     fruit(Bread b) {
        this.b = b;
    }

    public  int cost()
    {
        return b.cost()+1;
    }
}
定义要添加的奶酪cheese:

public class cheese extends  Bread {
    private Bread b;

    cheese(Bread b) {
        this.b = b;
    }
    public  int cost()
    {
        return b.cost()+2;
    }
}

测试:

 public static  void main(String[] s)
    {
       Bread b=new Mealbread();
        b=new fruit(b);
        b=new cheese(b);
        System.out.println(b.cost());
    }

打印出来的是12.

这里  蔬菜与奶酪是装饰者,面包是被装饰者。

装饰者应该继承被装饰者的超类,目的:以便装饰后还是原来的类型 。

装饰者应当复写要操作的方法,目的:被装饰者调用该方法时可以指向装饰者。



你可能感兴趣的:(装饰者模式)