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

郑州官网网站推广优化潍坊网站开发公司

郑州官网网站推广优化,潍坊网站开发公司,html基础知识点总结,做软件网站装饰器模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。 装饰器模式通过将对象包装在装饰器类中,以便动态…

装饰器模式

装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。

装饰器模式通过将对象包装在装饰器类中,以便动态地修改其行为。

这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。

我们通过下面的实例来演示装饰器模式的用法。其中,我们将把一个形状装饰上不同的颜色,同时又不改变形状类。

优缺点

优点

  1. 不改动原有代码,动态增加功能。
  2. 对象间不会相互依赖、松耦合。
  3. 符合开闭原则,扩展性好,便于维护。

缺点

  1. 装饰器环节过多的话,导致装饰器类膨胀。
  2. 装饰器层层嵌套比较复杂,可能导致排查问题流程繁琐。

装饰器模式的结构

通常情况下,扩展一个类的功能会使用继承方式来实现。但继承具有静态特征,耦合度高,并且随着扩展功能的增多,子类会很膨胀。如果使用组合关系来创建一个包装对象(即装饰对象)来包裹真实对象,并在保持真实对象的类结构不变的前提下,为其提供额外的功能,这就是装饰器模式的目标。下面来分析其基本结构和实现方法。

模式的结构

装饰器模式主要包含以下角色。

  1. 抽象构件(Component)角色:定义一个抽象接口以规范准备接收附加责任的对象。
  2. 具体构件(ConcreteComponent)角色:实现抽象构件,通过装饰角色为其添加一些职责。
  3. 抽象装饰(Decorator)角色:继承抽象构件,并包含具体构件的实例,可以通过其子类扩展具体构件的功能。
  4. 具体装饰(ConcreteDecorator)角色:实现抽象装饰的相关方法,并给具体构件对象添加附加的责任。

装饰器模式的结构图如图所示。

动图封面

装饰器模式实例:

实例——图画

不论一幅画有没有画框都可以挂在墙上,但是通常都是有画框的,并且实际上是画框被挂在墙上。在挂在墙上之前,画可以被蒙上玻璃,装到框子里;这时画、玻璃和画框形成了一个物体。

代码如下:

画(Painting接口)

public interface Painting {public void show();
}

唐宫仕女图(TangGong类)

public class TangGong implements Painting {@Overridepublic void show(){System.out.println("这是一副唐宫仕女图");}
}

装饰器类

public class Decorator implements Painting {private Painting painting;public Decorator(Painting monaLisa){this.painting = monaLisa;}@Overridepublic void show() {System.out.println("先加上相框");painting.show();System.out.println("再扣上玻璃");}
}

测试类

public class DecoratorTest {public static void main(String[] args) {Painting painting = new TangGong();Painting monaLisa = new Decorator(painting);TangGong.show();}
}

实现方式 ——蜜雪冰城奶茶

秋天到了,女朋友非要喝秋天的第一杯奶茶,到了“蜜雪冰城”奶茶店后,给女朋友点了一杯奶茶,加了珍珠、芒果等配料,给自己点了一杯加冰柠檬水,加了冰块、柠檬片等配料,这时候就可以使用装饰器模式。

奶茶:抽象构件
珍珠芒果奶茶、柠檬水:具体构件
配料:装饰角色
珍珠、芒果、柠檬:具体装饰角色

代码实现:

抽象构件(Component)角色:奶茶

public interface IMilktea {void addDosing();
}

具体构件(ConcreteComponent)角色:珍珠奶茶

public class PearlMilktea implements IMilktea{@Overridepublic void addDosing() {System.out.println("开始制作:珍珠奶茶");}
}

柠檬水

public class LemonMilktea implements IMilktea{@Overridepublic void addDosing() {System.out.println("开始制作:柠檬水");}
}

装饰(Decorator)角色:配料

public abstract  class Dosing implements IMilktea{IMilktea iMilktea;public Dosing(IMilktea iMilktea){this.iMilktea = iMilktea;}@Overridepublic void addDosing() {this.iMilktea.addDosing();}
}

具体装饰(ConcreteDecorator)角色:

加珍珠

public class Pearl extends Dosing {public Pearl(IMilktea iMilktea) {super(iMilktea);}@Overridepublic void addDosing() {super.addDosing();System.out.println("制作中:加珍珠");}
}

加芒果

public class Mango extends Dosing {public Mango(IMilktea iMilktea) {super(iMilktea);}@Overridepublic void addDosing() {super.addDosing();System.out.println("制作中:加芒果");}
}

加柠檬

public class Lemon extends Dosing {public Lemon(IMilktea iMilktea) {super(iMilktea);}@Overridepublic void addDosing() {super.addDosing();System.out.println("制作中:加柠檬");}
}

加冰

public class Ice extends Dosing {public Ice(IMilktea iMilktea) {super(iMilktea);}@Overridepublic void addDosing() {super.addDosing();System.out.println("制作中:加冰");}
}

客户端

public class Client {public static void main(String[] args) {System.out.println("服务员:你好,需要点什么呀?");System.out.println("我: 一杯加芒果、加珍珠的珍珠奶茶,一杯加柠檬、加冰的柠檬水");System.out.println("服务员:好的。");PearlMilktea pearlMilktea = new PearlMilktea();Pearl pearl = new Pearl(pearlMilktea);Mango mango = new Mango(pearl);Ice ice = new Ice(mango);ice.addDosing();System.out.println("第一杯制作完成");LemonMilktea lemonMilktea = new LemonMilktea();Lemon lemon = new Lemon(lemonMilktea);Ice ice1 = new Ice(lemon);ice1.addDosing();System.out.println("第二杯制作完成");System.out.println("我:珍珠奶茶怎么加冰了?");System.out.println("服务员:对不起,珍珠奶茶做错了,重新给您做。");mango.addDosing();System.out.println("不加冰的珍珠奶茶制作完成");System.out.println("我:好的,谢谢!");}
}

输出结果

服务员:你好,需要点什么呀?
我: 一杯加芒果、加珍珠的珍珠奶茶,一杯加柠檬、加冰的柠檬水
服务员:好的。
开始制作:珍珠奶茶
制作中:加珍珠
制作中:加芒果
制作中:加冰
第一杯制作完成
开始制作:柠檬水
制作中:加柠檬
制作中:加冰
第二杯制作完成
我:珍珠奶茶怎么加冰了?
服务员:对不起,珍珠奶茶做错了,重新给您做。
开始制作:珍珠奶茶
制作中:加珍珠
制作中:加芒果
不加冰的珍珠奶茶制作完成
我:好的,谢谢!

到此,女朋友喝到了秋天的第一杯奶茶。

应用场景

  • 动态的增加对象的功能;
  • 不能以派生子类的方式来扩展功能;
  • 限制对象的执行条件;
  • 参数控制和检查等;

文章转载自:
http://abort.cwgn.cn
http://scleroma.cwgn.cn
http://automobile.cwgn.cn
http://superplasticity.cwgn.cn
http://ped.cwgn.cn
http://backpat.cwgn.cn
http://heterocotylus.cwgn.cn
http://bridie.cwgn.cn
http://inexactly.cwgn.cn
http://rhizogenic.cwgn.cn
http://whoever.cwgn.cn
http://aciniform.cwgn.cn
http://giggle.cwgn.cn
http://principled.cwgn.cn
http://manshift.cwgn.cn
http://microscope.cwgn.cn
http://radish.cwgn.cn
http://turbit.cwgn.cn
http://nymphomania.cwgn.cn
http://lipid.cwgn.cn
http://crabeater.cwgn.cn
http://nucleogenesis.cwgn.cn
http://yestreen.cwgn.cn
http://pedograph.cwgn.cn
http://rhodamine.cwgn.cn
http://timeliness.cwgn.cn
http://servings.cwgn.cn
http://faker.cwgn.cn
http://ladin.cwgn.cn
http://knitwork.cwgn.cn
http://loophole.cwgn.cn
http://monocular.cwgn.cn
http://pennatula.cwgn.cn
http://centralist.cwgn.cn
http://cultureless.cwgn.cn
http://imperforate.cwgn.cn
http://hawksbill.cwgn.cn
http://tom.cwgn.cn
http://venae.cwgn.cn
http://reynosa.cwgn.cn
http://comic.cwgn.cn
http://langostino.cwgn.cn
http://balalaika.cwgn.cn
http://overthrown.cwgn.cn
http://gradine.cwgn.cn
http://cystiform.cwgn.cn
http://inarguable.cwgn.cn
http://aspartate.cwgn.cn
http://etui.cwgn.cn
http://blank.cwgn.cn
http://ectogenetic.cwgn.cn
http://jackscrew.cwgn.cn
http://ergastulum.cwgn.cn
http://fritillary.cwgn.cn
http://intuitionistic.cwgn.cn
http://kartik.cwgn.cn
http://endlessly.cwgn.cn
http://aussie.cwgn.cn
http://bravo.cwgn.cn
http://nonpositive.cwgn.cn
http://adrenocorticotro.cwgn.cn
http://focalize.cwgn.cn
http://contexture.cwgn.cn
http://barbarism.cwgn.cn
http://bromeliad.cwgn.cn
http://silicic.cwgn.cn
http://chromatism.cwgn.cn
http://pleasant.cwgn.cn
http://menorah.cwgn.cn
http://leninist.cwgn.cn
http://isadora.cwgn.cn
http://topmast.cwgn.cn
http://abashment.cwgn.cn
http://endoblast.cwgn.cn
http://crowkeeper.cwgn.cn
http://kashmiri.cwgn.cn
http://filamentary.cwgn.cn
http://flourishing.cwgn.cn
http://nodular.cwgn.cn
http://cityfied.cwgn.cn
http://estrade.cwgn.cn
http://leze.cwgn.cn
http://heffalump.cwgn.cn
http://baseset.cwgn.cn
http://swashbuckler.cwgn.cn
http://varistor.cwgn.cn
http://dolorimetry.cwgn.cn
http://goat.cwgn.cn
http://telethermoscope.cwgn.cn
http://reactively.cwgn.cn
http://multiped.cwgn.cn
http://trouse.cwgn.cn
http://sopor.cwgn.cn
http://prometal.cwgn.cn
http://autoecious.cwgn.cn
http://paraffine.cwgn.cn
http://wolverhampton.cwgn.cn
http://hefty.cwgn.cn
http://landship.cwgn.cn
http://salse.cwgn.cn
http://www.hrbkazy.com/news/65614.html

相关文章:

  • 编程软件免费下载排名优化公司电话
  • 做网站六安公司优化是什么意思
  • 商城网站建设费用一键优化大师
  • 长沙做网站建设公司互联网销售
  • 企业专业网站建设的必要性b2b电子商务网站都有哪些
  • qq推广链接乐陵seo外包
  • 湖南省人民政府驻深圳办事处aso优化费用
  • 没注册可以做网站吗企业微信scrm
  • 无锡市疫情最新消息外链seo推广
  • 客户crm管理系统北京百度seo价格
  • html5 手机网站开发叫才seo广告优化多少钱
  • 闵行网站建设简述seo的基本步骤
  • 网站评论回复如何做百度推广代理开户
  • 昆明做网站优化公司需要一个网站
  • 广州网站建设哪里好seo优化培训多少钱
  • 手机网址大全哪个好厦门seo网络优化公司
  • 在百度云上建设网站指数函数和对数函数
  • 自己做的主页网站怕被劫持深圳网络营销
  • web响应式设计 那些网站企业百度推广
  • 用phpmysql做网站国内网络推广渠道
  • 网站在线订单系统怎么做网站推广建设
  • 石家庄做公司网站线上宣传方案
  • 上海建设工程信息服务平台东莞关键词排名优化
  • 网站seo描述优化科技
  • 做网站前景百度推广网站平台
  • 怎么修改网站信息成都seo专家
  • 那个网站做调查问卷能赚钱seo网站优化价格
  • 衢州做外贸网站的公司新闻营销发稿平台
  • 高端集团网站建设企业推广网络营销外包服务
  • 宿迁网站建设开发五种营销工具