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

西安网站建设联系电话上海门户网站制作公司

西安网站建设联系电话,上海门户网站制作公司,购买网站空间的注意事项,专业营销网站建设公司写在前面 本文看下桥接设计模式。 1#xff1a;介绍 1.1#xff1a;什么时候桥接设计模式 当一个业务场景由多个变化维度组成#xff0c;并且这多个变化的维度到底有多少种情况是不确定#xff0c;比如现在我们要为瑞幸咖啡写一个系统#xff0c;很自然的#xff0c;…写在前面 本文看下桥接设计模式。 1介绍 1.1什么时候桥接设计模式 当一个业务场景由多个变化维度组成并且这多个变化的维度到底有多少种情况是不确定比如现在我们要为瑞幸咖啡写一个系统很自然的需要在系统中来表示咖啡此时思考下咖啡有哪些维度呢当然首先是咖啡这是确定的但是以下的维度却是不确定的 1:杯子的大小可能是大杯中杯小杯 2:咖啡的味道可能是原味加糖加奶加糖和奶对于以上的这个场景我们就可以考虑使用桥接设计模式来实现。 1.2UML类图 原型设计模式包含如下元素 1抽象化(Abstraction)角色使用多个变化维度中一个来定义一个定义一个抽象类 2修正抽象化(RefinedAbstraction)角色继承抽象化角色增加额外的操作如无特殊需求可不需要我理解的 3实现化(Implementor)角色多个变化维度的一个 4具体实现化角色实现化角色子类提供某个变化维度的具体变化类型UML图如下 2实例 源码 。 2.1场景 现在有一个接口有一个方法需要一个ListString的参数但是客户端只能提供逗号分割的字符串作为参数这样就可以定义一个接受逗号分割的字符串参数的接口并提供实现进行适配。 2.2程序 比如现在我们要为瑞幸咖啡写一个系统很自然的需要在系统中来表示咖啡此时思考下咖啡有哪些维度呢当然首先是咖啡这是确定的但是以下的维度却是不确定的 1:杯子的大小可能是大杯中杯小杯 2:咖啡的味道可能是原味加糖加奶加糖和奶这里我们将杯子的大小来作为抽象化角色。 定义实现化角色 定义了往咖啡中加什么调料。 // 咖啡中加糖牛奶等的抽象接口(实现化的顶层接口) // 抽象的是在咖啡中加什么东西糖牛奶等 public interface ICoffeeAdditives {void addSomething(); }定义具体实现化角色 这里分别实现加奶和加糖其它的需要的类比添加接口。 // 加奶最终会加到咖啡中生成加奶咖啡 public class Milk implements ICoffeeAdditives {Overridepublic void addSomething() {System.out.println(加奶);} }//加糖 public class Sugar implements ICoffeeAdditives {Overridepublic void addSomething() {System.out.println(加糖);} }定义抽象化角色 // 抽象化Abstraction // 抽象是咖啡杯大杯小杯中杯等 public abstract class Coffee {// 保存一个实现话的引用从而确定另外一个变化维度的信息protected ICoffeeAdditives additives;// 这里就好像桥一样将抽象化和实现化连接在了一起也正是桥接设计模式名称的来源public Coffee(ICoffeeAdditives additives){this.additivesadditives;}// 客户点咖啡方法的抽象public abstract void orderCoffee(int count); }以上在构造函数中获取往咖啡加调料的类就好像是一个桥一样将杯子大小和咖啡加的调料建立了联系这也是桥接设计模式中的桥接名称的来源。 定义修正抽象话角色 这里仅仅是为了学习的完整性但并无实际作用。 // 修正抽象化角色增加新的操作个人认为该类可有可无如果没有特殊的需求 // 在桥接设计模式中也可以没有该类 public abstract class RefinedCoffee extends Coffee {public RefinedCoffee(ICoffeeAdditives additives) {super(additives);}// public void checkQuality() { // Random ran new Random(); // System.out.println(String.format(%s 添加%s, additives.getClass().getSimpleName(), ran.nextBoolean() ? 太多 : 正常)); // } }定义被子大小维度的大杯和小杯 public class SmallCoffee extends RefinedCoffee {public SmallCoffee(ICoffeeAdditives coffeeAdditives) {super(coffeeAdditives);}Overridepublic void orderCoffee(int count) {// 点了几杯咖啡System.out.println(点了 count 小杯咖啡);// 加什么super.additives.addSomething();} }public class LargeCoffee extends RefinedCoffee {public LargeCoffee(ICoffeeAdditives coffeeAdditives) {super(coffeeAdditives);}Overridepublic void orderCoffee(int count) {// 点了几杯咖啡System.out.println(点了 count 大杯咖啡);// 加什么super.additives.addSomething();} }测试 // 两大杯加奶 Test public void testCase1() {RefinedCoffee largeWithMilk new LargeCoffee(new Milk());largeWithMilk.orderCoffee(2); }输出 点了2 大杯咖啡 加奶// 8小杯加糖 Test public void testCase2() {SmallCoffee smallCoffee new SmallCoffee(new Sugar());smallCoffee.orderCoffee(8); }输出 点了8 小杯咖啡 加糖写在后面 参考文章列表 秒懂设计模式之桥接模式Bridge Pattern 。
http://www.yutouwan.com/news/228870/

相关文章:

  • 信阳公司做网站襄阳网站建设楚翼网络
  • 合肥专业手机网站哪家好注册公司注册资金可以随便写吗
  • 东莞网站设计公司排名网站建设范本
  • 成都房地产网站建设c在线编程网站
  • 阿里巴巴吧网站建设网站建设锚点链接
  • 浙江建设厅继续教育网站江西天亿建设有限公司网站
  • 学网站建设需要几年站内关键词排名优化软件
  • 制作一个网站的成本代理登录网站
  • 仙游网站建设公司地方门户网站系统
  • 有没有小学生做兼职的网站湖南城乡建设网站
  • 北京市建设监理协会官方网站北京网站建设公司完美湖南岚鸿首 选
  • 上海松江网站制作律师网站建设公司
  • 网站后台页面进不去网站开发岗位职责及任职要求
  • 凌源网站优化上市网络公司排名
  • 全自动建站系统源码网站被恶意关键字访问
  • 网站建设与管理自考试题及答案wordpress主题安全
  • 网站建设所需的硬件设备滨州医学院做计算机作业的网站
  • 如果做京东优惠卷的网站辽宁建设工程信息网官网新网站如何进入
  • 有没有学做衣服的网站艾臣网站建设
  • 招聘代做网站网站的领券商城怎么做
  • 重庆万州网站建设哪家好华为云域名注册
  • wdcp新建网站公司员工培训内容有哪些
  • 个人网站成品wordpress阿里百秀5.4
  • 如何做网站 百度成都的做网站公司
  • 长沙网站的优化GTA5房产网站建设中
  • 域名备案用的网站建设方案wordpress按照证书
  • 家具展示型网站东莞电商网站公司
  • 建网站 企汇网家装室内设计
  • 哪家企业网站做的好社交账号登录wordpress
  • 做网站网页多少钱网站开发的名称叫什么