三、装饰者模式

简单的可以理解为给爱用继承人的一种新的设计方式

星巴克咖啡
因为星巴克咖啡的扩张速度太快了,所以要更新他们的订单系统,以合乎他们的订单需求
他们原来的类是这样设计的.
这里写图片描述

因为在在购买的时候还需要加入一些调料,例如,蒸奶,豆浆,摩卡,所以订单系统也会来考虑到调料部分

下面是一开始他们的所有类设计图
这里写图片描述

这简直就是类爆炸啊!!!!

违反了我们的设计原则:
多用组合少用继承,以及没有实现松耦合

这里写图片描述

这里写图片描述

这个设计不好的地方在哪?
调料的价格更改需要我们更改代码
一旦出现新的调料我们就需要加入新的方法,并改变cost方法
万一顾客想要双倍的摩卡怎么办?

此刻有引入了一个新的设计原则:
类应该对扩展开放,对修改关闭.

需要注意的是:不是所有的地方都需要使用装饰者模式浪费时间,只在经常需要改变的地方

我们使用装饰的做法就是:
我们以饮料为主体,然后再运行时调用调料来装饰饮料

1.拿一个初始咖啡对象
2.以摩卡对象来装饰它
3.以奶泡对象来装饰他
4.调用超类的cost方法来委托运算,计算价格

装饰者就是在被装饰者的行为前或行为后加上特定的行为,来达到特定的目的.

装饰者模式定义:动态的将行为附加到对象上,扩展功能比继承更方便

java代码实现

/**
 * @author wang
 * 饮料基类
 */
public abstract class Beverage {
    String description = "unkonw Beverage";



    public String getDescription(){
        return description;
    }



    public abstract double  cost();
}

/**
 * @author wang
 *  调料基类
 */
public abstract class Condiment extends Beverage{



    public abstract String getDescription();


}

public class DarkRoast extends Beverage{


    public DarkRoast(){
        description = "DarkRoast";
    }

    @Override
    public double cost() {
        return 10.0;
    }


}
public class Decaf extends Beverage{


    public  Decaf(){
        description = "Decaf";
    }


    @Override
    public double cost() {

        return 6.0;
    }

}
public class HouseBlend extends Beverage{

    public HouseBlend(){

        description = "HouseBlend";

    }


    @Override
    public double cost() {

        return 12.0;
    }

}

public class milk extends Condiment{


    Beverage beverage; 
    public milk(Beverage beverage){

        this.beverage = beverage;

    }


    @Override
    public String getDescription() {

        return beverage.getDescription()+",milk";
    }

    @Override
    public double cost() {

        return 5.0+beverage.cost();
    }

}

public class Mocha extends Condiment{
    Beverage beverage;

    public Mocha(Beverage beverage){

        this.beverage = beverage;
    }



    @Override
    public String getDescription() {

        return beverage.getDescription()+",Mocha";
    }

    @Override
    public double cost() {

        return 2.0+beverage.cost();
    }

}

public class Soy extends Condiment{

    Beverage beverage;
    public Soy(Beverage beverage){
        this.beverage = beverage;
    }


    @Override
    public String getDescription() {

        return beverage.getDescription()+",soy";
    }

    @Override
    public double cost() {

        return 0.5+beverage.cost();
    }

}
public class test {
    public static void main(String[] args) {
        Beverage    beverage = new Espresso();
        System.out.println(beverage.getDescription()+"$"+beverage.cost());


        Beverage    beverage2 = new DarkRoast();

        beverage2 = new Mocha(beverage2);
        beverage2 = new whlp(beverage2);
        System.out.println(beverage2.getDescription()+"$"+beverage2.cost());



        Beverage    beverage3 = new HouseBlend();
        beverage3  = new Soy(beverage3);
        System.out.println(beverage2.getDescription()+"$"+beverage2.cost());





    }
}
public class whlp extends Condiment{
    Beverage beverage;
    public whlp(Beverage beverage){
        this.beverage = beverage;
    }


    @Override
    public String getDescription() {

        return beverage.getDescription()+",whlp";
    }

    @Override
    public double cost() {

        return 3.0+beverage.cost();
    }

}



java内部应用装饰者模式最多的是javaIO

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
森林防火应急联动指挥系统是一个集成了北斗定位/GPS、GIS、RS遥感、无线网络通讯、4G网络等技术的现代化智能系统,旨在提高森林火灾的预防和扑救效率。该系统通过实时监控、地图服务、历史数据管理、调度语音等功能,实现了现场指挥调度、语音呼叫通讯、远程监控、现场直播、救火人员生命检测等工作的网络化、智能化、可视化。它能够在火灾发生后迅速组网,确保现场与指挥中心的通信畅通,同时,系统支持快速部署,适应各种极端环境,保障信息的实时传输和历史数据的安全存储。 系统的设计遵循先进性、实用性、标准性、开放性、安全性、可靠性和扩展性原则,确保了技术的领先地位和未来的发展空间。系统架构包括应急终端、无线专网、应用联动应用和服务组件,以及安全审计模块,以确保用户合法性和数据安全性。部署方案灵活,能够根据现场需求快速搭建应急指挥平台,支持高并发视频直播和大容量数据存储。 智能终端设备具备防等级,能够在恶劣环境下稳定工作,支持北斗+GPS双模定位,提供精确的位置信息。设备搭载的操作系统和处理器能够处理复杂的任务,如高清视频拍摄和数据传输。此外,设备还配备了多种传感器和接口,以适应不同的使用场景。 自适应无线网络是系统的关键组成部分,它基于认知无线电技术,能够根据环境变化动态调整通讯参数,优化通讯效果。网络支持点对点和点对多点的组网模式,具有低功耗、长距离覆盖、强抗干扰能力等特点,易于部署和维护。 系统的售后服务保障包括安装实施服务、系统维护服务、系统完善服务、培训服务等,确保用户能够高效使用系统。提供7*24小时的实时故障响应,以及定期的系统优化和维护,确保系统的稳定运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值