装饰者模式

一.装饰者模式

装饰者模式:通过构造函数,一直对一个基本类进行装饰.

二.装饰者模式-示例-点餐

我们在点餐时,都是在一份米饭上加不同的东西,鸡肉,香菇,等

1.新建一IOrder接口

public interface IOrder {

    public int order();
}

2.新建一被装饰类---接下来的所有操作都是在一份米饭上进行的

public class Rice implements IOrder {

    private String name = "米饭";

    private int price = 3;

    @Override
    public int order() {
        System.out.println("1份"+this.name+"--单价:"+this.price+"元");
        return this.price;
    }
}

3.新建一装饰者的抽象装饰类

public abstract class MenuDecorater implements IOrder{

    private IOrder iOrder;

    public MenuDecorater(IOrder iOrder) {
        this.iOrder = iOrder;
    }

    @Override
    public int order() {
        return iOrder.order();
    }
}

4.新建一鸡肉类继承菜单装饰抽象类

public class Chicken extends  MenuDecorater{

    public Chicken(IOrder iOrder) {
        super(iOrder);
    }

    private String name = "鸡肉";

    private int price = 5;

    @Override
    public int order() {
        System.out.println("1份"+this.name+"--单价:"+this.price+"元");
        return  super.order() + this.price;
    }

}

5.新建一香菇类继承菜单装饰抽象类

public class Mushroom extends MenuDecorater {
    public Mushroom(IOrder iOrder) {
        super(iOrder);
    }

    private String name = "香菇";

    private int price = 3;

    @Override
    public int order() {
        System.out.println("1份"+this.name+"--单价:"+this.price+"元");
        return  super.order() + this.price;
    }

}

6.新建一测试类----比方说我们如果要加菜,就在外层再包裹一层菜类就行

public class Test {
    public static void main(String[] args) {
        int q = new Chicken(new Rice()).order();
        System.out.println(" --------合计:"+q+"元");
        System.out.println("==============================");
        int i = new Mushroom(new Chicken(new Rice())).order();
        System.out.println(" --------合计:"+i+"元");
    }
}

7.测试结果----可以动态点餐,动态算费

8.UML图

三.装饰者模式和适配器模式的对比

装饰者模式:是在原基础(米饭)上,进行层层装饰达到不同的效果的,当并未改变米饭这一特性

适配器模式:是通过对老接口原实现的更改,来迎合(适配)新的需求

====================>适配器模式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值