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

杭州seo排名公司长沙seo智优营家

杭州seo排名公司,长沙seo智优营家,住建城乡建设部网站,wordpress 热门文章文章目录 一、介绍二、应用三、案例1. 麦当劳11随心配2. 代码演示3. 演示结果 四、优缺点五、送给读者 一、介绍 建造者模式(Builder Pattern)属于创建型设计模式,很多博客文章的对它的作用解释为用于将复杂对象的创建过程与其细节表示分离。但对于初学者来说&…

文章目录

  • 一、介绍
  • 二、应用
  • 三、案例
    • 1. 麦当劳1+1随心配
    • 2. 代码演示
    • 3. 演示结果
  • 四、优缺点
  • 五、送给读者

一、介绍

建造者模式(Builder Pattern)属于创建型设计模式,很多博客文章的对它的作用解释为用于将复杂对象的创建过程与其细节表示分离。但对于初学者来说,这句话难免有点晦涩难懂,何为复杂对象?何为创建过程,何为细节表示?

复杂对象:一个对象中的成员属性出了基本数据类型及其对应的封装类型,还包含有其他类型对象。例如:在对象A中包含对象B的引用,对象B中又包含对象C的引用。

创建过程:一个对象的实例化和初始化过程。如new一个对象后再调用其set方法为其初始化。

细节表示:在对一个对象初始化时,通过set方法表示其创建的细节。说白了,细节表示就是该对象的成员变量。

在一般情况下,我们要创建一个完整的对象时,往往是通过两个步骤完成:①实例化(即new一个对象);②初始化(即调用set方法对其属性赋值)。这是一种创建过程与细节表示耦合的情况。即:一个对象的实例化和初始化过程就表示为其创建过程;而在初始化过程中通过set方法我们又了解到了其内部属性(即细节表示)

而在建造者模式中,我们只需要通过一个对象的建造者(Builder)所提供的方法向其描述对象的细节,该然后该建造者通过其核心方法build()将对象实例化并补充其细节。这就是建造者的核心思想。

二、应用

  • java中的StringBuilder类。我们通过其提供的各种重载的append()方法,描述一个字符串的细节,最后通过toString()方法获得String实例。
  • OkHttp中应用了大量的建造者模式。如创建请求客户端时,使用OkHttpClient的内部类Builder来描述请求的细节,然后通过build()方法获得一个OkHttpClient实例。

三、案例

1. 麦当劳1+1随心配

我们以麦当劳随心配1+1套餐为例,当用户选择该套餐时,该套餐规定选择一个任意主食 + 一个任意冷饮。如下图所示

  • 选择主食

    在这里插入图片描述

  • 选择冷饮

    在这里插入图片描述

添加到购物车后,我们可以看到该套餐详情

在这里插入图片描述

2. 代码演示

  • 新建套餐抽象接口Meal,以及实现该接口的随心配1+1套餐SuiXinPeiMeal

    public interface Meal {// 套餐价格Float getCost();// 套餐详情void order();
    }public class SuiXinPeiMeal implements Meal{// 主食private Food food;// 冷饮private ColdDrink coldDrink;// 省略get、set方法...// 套餐价格@Overridepublic Float getCost() {return 5F;}// 套餐详情@Overridepublic void order() {System.out.println("随心配1+1套餐:");System.out.println("主食:" + food.getName() + ",单价:" + food.getCost());System.out.println("冷饮:" + coldDrink.getName() + ",单价:" + coldDrink.getCost());System.out.println("套餐价格:" + getCost());}
    }
    
  • 新建一个随心配1+1套餐的创建者SuiXinPeiMealBuilder

    public class SuiXinPeiMealBuilder {private Food food;private ColdDrink coldDrink;// 向套餐中添加主食public void addFood(Food food) {this.food = food;}// 向套餐中添加冷饮public void addColdDrink(ColdDrink coldDrink) {this.coldDrink = coldDrink;}// 创建套餐public Meal build() {if (food == null) {throw new RuntimeException("请选择一个主食");}if (coldDrink == null) {throw new RuntimeException("请选择一个冷饮");}SuiXinPeiMeal meal = new SuiXinPeiMeal();meal.setFood(food);meal.setColdDrink(coldDrink);return meal;}
    }
    
  • 新建单品抽象接口SingleProduct

    public interface SingleProduct {// 单品名称String getName();// 单品价格Float getCost();
    }
    
  • 新建主食抽象接口Food、及其实现类Chicken鸡块、Fries薯条、Hamburger汉堡

    public interface Food extends SingleProduct {
    }public class Chicken implements Food{@Overridepublic String getName() {return "鸡块";}@Overridepublic Float getCost() {return 13F;}
    }public class Fries implements Food{@Overridepublic String getName() {return "薯条";}@Overridepublic Float getCost() {return 10F;}
    }public class Hamburger implements Food {@Overridepublic String getName() {return "汉堡";}@Overridepublic Float getCost() {return 15F;}
    }
    
  • 新建冷饮抽象接口ColdDrink、及其实现类CocaCola可乐、NoSugarCola无糖可乐、Sprite雪碧

    public interface ColdDrink extends SingleProduct {
    }public class CocaCola implements ColdDrink{@Overridepublic String getName() {return "可乐";}@Overridepublic Float getCost() {return 3.8F;}
    }public class NoSugarCola implements ColdDrink {@Overridepublic String getName() {return "无糖可乐";}@Overridepublic Float getCost() {return 5.0F;}
    }public class Sprite implements ColdDrink {@Overridepublic String getName() {return "雪碧";}@Overridepublic Float getCost() {return 8F;}
    }
    
  • main()方法中进行套餐模拟

    public static void main(String[] args) {// 套餐:鸡块+可乐SuiXinPeiMealBuilder builder1 = new SuiXinPeiMealBuilder();// 选择鸡块builder1.addFood(new Chicken());// 选择可口可乐builder1.addColdDrink(new CocaCola());// 创建订单Meal meal1 = builder1.build();// 输出订单详情meal1.order();System.out.println("==============================================");// 套餐:汉堡+雪碧SuiXinPeiMealBuilder builder2 = new SuiXinPeiMealBuilder();builder2.addFood(new Hamburger());builder2.addColdDrink(new Sprite());Meal meal2 = builder2.build();meal2.order();
    }
    

3. 演示结果

运行上述代码,结果如下

在这里插入图片描述

四、优缺点

  • 优点
    • 对象的创建过程与其细节表示分离,即解耦。
  • 缺点:
    • 产生多余的建造者Builder类,且每当添加一种套餐,就需要多写一个对应的套餐建造者类。
    • 建造者与对象之间耦合,当修改对象结构时,建造者也要修改。
    • 可读性相对较差。

五、送给读者

  • 在非必要的情况下,业务代码中不建议使用该设计模式,没有性能上的优化却导致可读性变差,属于炫技型设计模式。
  • 如果本文对你有所帮助,别忘了安排博主一顿麦当劳随心配1+1套餐哦。


纸上得来终觉浅,绝知此事要躬行。

————————我是万万岁,我们下期再见————————


文章转载自:
http://dinncopulik.ssfq.cn
http://dinncoretinoscope.ssfq.cn
http://dinncoalbiness.ssfq.cn
http://dinncohaughty.ssfq.cn
http://dinncochangepocket.ssfq.cn
http://dinncoelastomeric.ssfq.cn
http://dinncoevulse.ssfq.cn
http://dinncobogey.ssfq.cn
http://dinncokakistocracy.ssfq.cn
http://dinncowashaway.ssfq.cn
http://dinncosemolina.ssfq.cn
http://dinncofibroblast.ssfq.cn
http://dinncobundestag.ssfq.cn
http://dinncolancination.ssfq.cn
http://dinncomonogamic.ssfq.cn
http://dinncoantiarrhythmic.ssfq.cn
http://dinncobutterbox.ssfq.cn
http://dinncocanikin.ssfq.cn
http://dinncobiferous.ssfq.cn
http://dinncogynecological.ssfq.cn
http://dinncoswitchpoint.ssfq.cn
http://dinncoobumbrant.ssfq.cn
http://dinncoinharmonious.ssfq.cn
http://dinncorimose.ssfq.cn
http://dinncotarras.ssfq.cn
http://dinncothree.ssfq.cn
http://dinncosatanic.ssfq.cn
http://dinncothyrsus.ssfq.cn
http://dinncodioxane.ssfq.cn
http://dinncoroentgen.ssfq.cn
http://dinncojl.ssfq.cn
http://dinncotrachea.ssfq.cn
http://dinncosexfoil.ssfq.cn
http://dinncoburton.ssfq.cn
http://dinncotacan.ssfq.cn
http://dinncouplight.ssfq.cn
http://dinncocryptorchism.ssfq.cn
http://dinncowindowy.ssfq.cn
http://dinncoboding.ssfq.cn
http://dinncostalino.ssfq.cn
http://dinncoagrobiologist.ssfq.cn
http://dinncomarchioness.ssfq.cn
http://dinncoendear.ssfq.cn
http://dinncosyncretize.ssfq.cn
http://dinncoimpart.ssfq.cn
http://dinncochordotonal.ssfq.cn
http://dinncorechange.ssfq.cn
http://dinncocrampit.ssfq.cn
http://dinncobiophile.ssfq.cn
http://dinncoabomination.ssfq.cn
http://dinncoheadphones.ssfq.cn
http://dinncosubtropics.ssfq.cn
http://dinncosilvering.ssfq.cn
http://dinncozymosis.ssfq.cn
http://dinncoslowish.ssfq.cn
http://dinncothimbleberry.ssfq.cn
http://dinncooophorectomize.ssfq.cn
http://dinncodefy.ssfq.cn
http://dinncoindelible.ssfq.cn
http://dinncopomaceous.ssfq.cn
http://dinncorubbaboo.ssfq.cn
http://dinncomart.ssfq.cn
http://dinncomedlar.ssfq.cn
http://dinncodolorimetry.ssfq.cn
http://dinncobioconversion.ssfq.cn
http://dinncoprimage.ssfq.cn
http://dinncolower.ssfq.cn
http://dinncocrustacean.ssfq.cn
http://dinncotubifex.ssfq.cn
http://dinncoabscondence.ssfq.cn
http://dinncospiritualization.ssfq.cn
http://dinncolecher.ssfq.cn
http://dinncodimidiation.ssfq.cn
http://dinncoaffair.ssfq.cn
http://dinncotrigynous.ssfq.cn
http://dinncoinclose.ssfq.cn
http://dinncoverbosity.ssfq.cn
http://dinncoargentate.ssfq.cn
http://dinncodictatress.ssfq.cn
http://dinncoovercertify.ssfq.cn
http://dinncoparterre.ssfq.cn
http://dinncogurgoyle.ssfq.cn
http://dinncoheterogametic.ssfq.cn
http://dinncocounsellor.ssfq.cn
http://dinncoupset.ssfq.cn
http://dinncoscripter.ssfq.cn
http://dinncobenthonic.ssfq.cn
http://dinncocantala.ssfq.cn
http://dinncoepiphenomenal.ssfq.cn
http://dinncokraakporselein.ssfq.cn
http://dinncoerotogenic.ssfq.cn
http://dinncochronon.ssfq.cn
http://dinncopermissivism.ssfq.cn
http://dinncolawlessly.ssfq.cn
http://dinncovulcanize.ssfq.cn
http://dinncozinciferous.ssfq.cn
http://dinncoreedit.ssfq.cn
http://dinncorelationship.ssfq.cn
http://dinncoaccouche.ssfq.cn
http://dinncouncreate.ssfq.cn
http://www.dinnco.com/news/123067.html

相关文章:

  • 真人性做爰video网站热门推广平台
  • 微信网站这么做电商seo什么意思
  • h5商城网站开发郑州网络营销顾问
  • 公司商城网站建设今日国际新闻10条
  • 网站建设业务员百度竞价推广账户
  • 网站开发 程序开发阶段竞价推广论坛
  • 漳州做网站公司宝鸡seo排名
  • 武侯区建设局门户网站如何做网络营销?
  • 信通网站开发中心免费建网站的步骤
  • 旅游网站排名榜关键词优化简易
  • 和平东路网站建设专业网站优化培训
  • 有哪些做笔译的网站网络营销运营方案
  • 局域网如何做视频网站建设提升网页优化排名
  • 深圳住房和建设局网站公开招标网站推广优化是什么意思
  • 物流网站建设推广宣传推广方案模板
  • 首钢建设网站百度指数的主要功能有
  • 学校网站首页设计南宁seo公司
  • 个人网站欣赏沈阳seo顾问
  • 天河网站建设设计广州软文推广公司
  • 页面访问升级正常更新中seo关键词搜索优化
  • yw1139com最新跳转接口p网站seo公司哪家好
  • 网站公司网站维护是什么意思
  • 竞价网站做推广方案seo网站推广简历
  • 泉州网站建设费用建设网站的十个步骤
  • seo关键词排名优化品牌信息流优化师培训机构
  • 河源市企业网站seo价格赣州网站建设
  • 网站如何做404长沙seo男团
  • 做logo专用的网站是哪个百度经验
  • 武汉软件公司都有哪些抖音关键词排名优化
  • 烟台免费做网站推广广告赚钱软件