当前位置: 首页 > news >正文

汕头建站平台排名第一的手机清理软件

汕头建站平台,排名第一的手机清理软件,做网站点击率赚钱吗,中国建设监督网站装饰模式的定义: 装饰模式(Decorator Pattern)是一种结构型设计模式,它允许你动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。 何时应用装饰模式? 1.当需要动态地给…

装饰模式的定义:

装饰模式(Decorator Pattern)是一种结构型设计模式,它允许你动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。

何时应用装饰模式?

1.当需要动态地给一个对象增加功能时:如果你需要在运行时给一个对象增加新的职责,而不是在编译时,那么装饰模式是一个好的选择。

2.当使用继承会导致大量子类时:如果你使用继承来扩展对象的功能,那么可能会产生大量的子类,导致系统难以管理和维护。使用装饰模式可以避免这个问题。

3.当需要透明地增强对象的功能时:装饰模式允许你透明地增强对象的功能,这意味着客户端代码可以像使用原始对象一样使用装饰后的对象,而不需要知道对象已经被装饰了。

需要注意什么?

  1. 避免过度使用:虽然装饰模式很灵活,但过度使用它可能会导致代码变得复杂和难以理解。因此,在决定是否使用装饰模式时,需要权衡其优点和缺点。

  2. 性能考虑:由于装饰模式会在运行时动态地添加功能,因此可能会带来一些性能开销。如果性能是一个关键问题,那么需要仔细考虑是否使用装饰模式。

  3. 设计好接口:装饰模式依赖于良好的接口设计。如果接口设计得不好,那么装饰模式可能会变得难以使用和维护。

重要的构造部分:

  1. 组件(Component):这是一个接口或抽象类,它定义了对象的核心职责。

  2. 具体组件(ConcreteComponent):这是实现了组件接口的具体类。

  3. 装饰器(Decorator):这也是一个接口或抽象类,它实现了组件接口,并持有一个对组件对象的引用。装饰器接口通常会增加一些新的方法或覆盖组件接口中的方法,以提供额外的功能。

  4. 具体装饰器(ConcreteDecorator):这是实现了装饰器接口的具体类。具体装饰器会持有对组件对象的引用,并在需要时调用组件对象的方法。同时,具体装饰器还可以添加自己的功能。

  5. 客户端(Client):客户端代码通过组件接口与对象交互,而不需要知道对象是否被装饰了。

示例实现:

以下是一个简单的装饰模式示例,它模拟了一个咖啡订单系统。在这个系统中,可以为咖啡添加不同的调料,如牛奶和糖,这些调料就是装饰器。

首先,定义一个Beverage接口,它代表了一种饮料:

public interface Beverage {  String getDescription();  double cost();  
}

接着,创建一个实现了Beverage接口的DarkRoast类,它代表了一种深焙咖啡:

public class DarkRoast implements Beverage {  @Override  public String getDescription() {  return "Dark Roast Coffee";  }  @Override  public double cost() {  return 1.99;  }  
}

现在创建一个CondimentDecorator抽象类,它实现了Beverage接口并持有一个Beverage对象的引用。这个类将作为所有装饰器的基类:

public abstract class CondimentDecorator implements Beverage {  protected Beverage beverage;  public CondimentDecorator(Beverage beverage) {  this.beverage = beverage;  }  @Override  public String getDescription() {  return beverage.getDescription();  }  @Override  public double cost() {  return beverage.cost();  }  
}

接下来创建两个具体的装饰器类:Milk和Sugar,它们分别表示加牛奶和加糖的调料:


//milk类
public class Milk extends CondimentDecorator {  public Milk(Beverage beverage) {  super(beverage);  }  @Override  public String getDescription() {  return beverage.getDescription() + ", Milk";  }  @Override  public double cost() {  return beverage.cost() + 0.20; // 假设加牛奶要额外收费0.2美元  }  
}  //suger类 
public class Sugar extends CondimentDecorator {  public Sugar(Beverage beverage) {  super(beverage);  }  @Override  public String getDescription() {  return beverage.getDescription() + ", Sugar";  }  @Override  public double cost() {  return beverage.cost() + 0.10; // 假设加糖要额外收费0.1美元  }  
}

最后创建一个客户端类来演示如何使用装饰模式:

public class CoffeeShop {  public static void main(String[] args) {  Beverage beverage = new DarkRoast();  System.out.println(beverage.getDescription() + " $" + beverage.cost());  Beverage beverageWithMilk = new Milk(new DarkRoast());  System.out.println(beverageWithMilk.getDescription() + " $" + beverageWithMilk.cost());  Beverage beverageWithSugarAndMilk = new Milk(new Sugar(new DarkRoast()));  System.out.println(beverageWithSugarAndMilk.getDescription() + " $" + beverageWithSugarAndMilk.cost());  }  
}

最后运行代码会显示:

Dark Roast Coffee $1.99  
Dark Roast Coffee, Milk $2.19  
Dark Roast Coffee, Sugar, Milk $2.29

http://www.yayakq.cn/news/433318/

相关文章:

  • 网站开发设计的技术路线简洁大气的企业网站
  • 网站地图+wordpress跨境电商有什么平台
  • 如何创建二级域名网站c#做网站
  • 学网站建设要什么沧州网站建设微艾薇
  • 大淘客网站是怎么做的凡科建站官网需要什么
  • 自建网站如何盈利云主机安装wordpress
  • 检测设备技术支持东莞网站建设深圳建网站企业
  • 网页设计免费模板网站推荐专做公司网站 大庆
  • wordprees可以做棋类网站吗商城网站建设流程图
  • 临沂网站制作定制有项目去哪里找投资人
  • 中国网站建设哪家公司好门户网站重要性
  • 响应式外贸营销网站九龙坡网站建设公司
  • 上海公司注销流程及费用优化整站
  • 深圳开发公司网站网站设计昆明
  • 网站开发工程师职位概要品牌vi是什么意思
  • 云南网站设计流程江苏企业网站建设价格
  • 一款非常不错的seo网站优化公司源码红河企业网络推广外包
  • 数据库里建设好的网站为什么外网进不去网站ui网页设计图片
  • 服装设计师关键词seo自然排名优化
  • 电子商务网站建设的核心网页设计实验报告3000字
  • 安徽省住房城乡建设厅网站电工网站如何做广告
  • 淄博那里有做网站的国外市场网站推广公司
  • 2021免费正能量网站入口做茶道网站
  • 做网站必须有云虚拟主机企业网站seo外包 s
  • asp系统网站怎么做优化侨联网站建设
  • 软件下载网站知乎wordpress 自定义 sql
  • 一站式网站建设哪家专业个人社团网站怎么做
  • 无水印做海报的网站如何做网站图标
  • 海纳企业网站建设公司网站空间怎么续费
  • 深圳沙井公司网站建设广告网站建设实训报告