游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

建造者模式

  建造者模式定义及优缺点
  建造者(Builder)模式的定义:指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不变相分离,即产品的组成部分是不变的,但每一部分是可以灵活选择的。
  优点:封装性好,构建和表示分离。扩展性好,各个具体的建造者相互独立,有利于系统的解耦。客户端不必知道产品内部组成的细节,建造者可以对创建过程逐步细化,而不对其它模块产生任何影响,便于控制细节风险。
  缺点:产品的组成部分必须相同,这限制了其使用范围。如果产品的内部变化复杂,如果产品内部发生变化,则建造者也要同步修改,后期维护成本较大。为什么要使用建造者模式packagecom。jmmq。load。jim。designpatterns。buildpattern;Author:jimmyDate:202182919:20Description:常规实例化实体类一般如下写。这种写法的问题1、如果只使用构造器来构造实例,那么构造器要写很多。在使用的时候要一个一个去对2、如果使用setter来设值时则在程序在运行时可能无法确定这个实例中有哪些属性。这种情况可以考虑使用建造者模式来处理publicclassCarNormal{必须的组件发动机privateStringengine;轮胎privateStringshoe;地盘privateStringbaseplate;车架privateStringcarframe;。。。可选组件音箱privateStringaudio;倒车影像privateintvehicleBackupCamera;。。。全参publicCarNormal(Stringengine,Stringshoe,Stringbaseplate,Stringcarframe,Stringaudio,intvehicleBackupCamera){this。engineengine;this。shoeshoe;this。baseplatebaseplate;this。carframecarframe;this。audioaudio;this。vehicleBackupCameravehicleBackupCamera;}必选参数publicCarNormal(Stringengine,Stringshoe,Stringbaseplate,Stringcarframe){this。engineengine;this。shoeshoe;this。baseplatebaseplate;this。carframecarframe;}publicCarNormal(){}其他参数列表的构造器。。。gettersetter}优化1
  我们优化一下来看看下面代码:Author:jimmyDate:202182919:34Description:builder模式:一种对象的创建模式这种模式的方式是使用内部类来隐藏外部类的具体初始化逻辑,提供对应的方法来在初始化的时候设置属性值。这种模式因为加载的东西很多,所以相对会影响性能。在未来可能会对类进行扩展属性的时候可以考虑是否使用这种方式publicclassCar{必须的组件发动机privateStringengine;轮胎privateStringshoe;地盘privateStringbaseplate;车架privateStringcarframe;。。。可选组件音箱privateStringaudio;倒车影像privateintvehicleBackupCamera;。。。public内部类,内部属性和外部一致publicstaticclassCarBuilder{必须的组件发动机privateStringengine;轮胎privateStringshoe;地盘privateStringbaseplate;车架privateStringcarframe;。。。可选组件音箱privateStringaudio;倒车影像privateintvehicleBackupCamera;。。。多种构造器publicCarBuilder(){}publicCarBuilder(Stringengine,Stringshoe,Stringbaseplate,Stringcarframe){this。engineengine;this。shoeshoe;this。baseplatebaseplate;this。carframecarframe;}publicCarBuilder(Stringengine,Stringshoe,Stringbaseplate,Stringcarframe,Stringaudio,intvehicleBackupCamera){this。engineengine;this。shoeshoe;this。baseplatebaseplate;this。carframecarframe;this。audioaudio;this。vehicleBackupCameravehicleBackupCamera;}publicCarBuilderaudio(Stringaudio){this。audioaudio;returnthis;}提供获取外部类方法publicCarbuild(){returnnewCar(this);}}私有化构造方法,并且构造器中传入内部的构造类privateCar(CarBuilderbuilder){enginebuilder。engine;shoebuilder。shoe;。。。}测试publicstaticvoidmain(String〔〕args){CarcarnewCar。CarBuilder()。audio(车载音响)。。。。build();}}建造者模式
  将创建实例抽象建模。要获取一个对象的实例,把对象看作一个产品,那么就有一个产品类product产品是具有多种形态的,因此需要有一些继承product的子产品建造产品就需要一个建造者builder同样对应产品的多种形态,因此建造者也就需要多个类因为想要隐藏建造的过程,因此我们也需要一个代理的类来控制建造过程
  所以整体上也就分为产品类、建造者类、指挥者(导演者)这三个角色(有的人会把建造者分为抽象建造者和真实建造者)
  showcode
  产品产品类publicabstractclassPerson{protectedStringhead;protectedStringbody;protectedStringfoot;publicStringgetHead(){returnhead;}publicvoidsetHead(Stringhead){this。headhead;}publicStringgetBody(){returnbody;}publicvoidsetBody(Stringbody){this。bodybody;}publicStringgetFoot(){returnfoot;}publicvoidsetFoot(Stringfoot){this。footfoot;}}子类产品1publicclassManextendsPerson{publicMan(){System。out。println(createaman);}OverridepublicStringtoString(){returnMan{};}}子类产品2publicclassWomanextendsPerson{publicWoman(){System。out。println(createaWoman);}OverridepublicStringtoString(){returnWoman{};}}
  建造者抽象建造者publicabstractclassPersonBuilder{建造部件publicabstractvoidbuildHead();publicabstractvoidbuildBody();publicabstractvoidbuildFoot();publicabstractPersoncreatePerson();}具体建造者publicclassManBuilderextendsPersonBuilder{privatePersonperson;publicManBuilder(){this。personnewMan();}OverridepublicvoidbuildHead(){person。setHead(BraveHead);}OverridepublicvoidbuildBody(){person。setBody(Strongbody);}OverridepublicvoidbuildFoot(){person。setFoot(powfulfoot);}OverridepublicPersoncreatePerson(){returnperson;}}具体建造者2publicclassWomanBuilderextendsPersonBuilder{privatePersonperson;publicWomanBuilder(){this。personnewWoman();}OverridepublicvoidbuildHead(){person。setHead(PrettyHead);}OverridepublicvoidbuildBody(){person。setBody(softbody);}OverridepublicvoidbuildFoot(){person。setFoot(longwhitefoot);}OverridepublicPersoncreatePerson(){returnperson;}}
  指挥者导演者publicclassDirector{publicPersonbuildPerson(PersonBuilderpb){pb。buildHead();pb。buildBody();pb。buildFoot();returnpb。createPerson();}clientcalltest客户端调用测试测试publicstaticvoidmain(String〔〕args){System。out。println(createDirector);DirectordirectornewDirector();Personp1director。buildPerson(newManBuilder());System。out。println(p1);System。out。println();Personp2director。buildPerson(newWomanBuilder());System。out。println(p2);}}runresultcreateDirectorcreateamanMan{headBraveHead,bodyStrongbody,footpowfulfoot}createaWomanWoman{headPrettyHead,bodysoftbody,footlongwhitefoot}

特斯拉的致命BUG?Model3再现惊魂一撞,AP高速直撞侧出品:电动星球News作者:蟹老板本人今天上午,三则视频穿越海峡,以极快速度传遍了大陆社交网络和车主社群。视频说的是同一件事:一辆Model3在高速公路行驶时……震惊!尼日利亚港口货物清关费用是货物成本的8倍以上尽管尼日利亚政府打着促进经商便利的口号,但由于经商成本高、流程效率低,以及尼日利亚海港的敲诈勒索事件频发,已经让这个国家的门户失去了竞争力。1。世界最贵的港口在与《……月饼大战提前打响,创新口味传统元素对垒杭州盒马离中秋还有一个月时间,盒马工坊的苏式现烤月饼,已经香飘全国各地的门店。一向脑洞大、敢想敢做的盒马,今年独家研发了一款藤椒味香酥牛肉月饼,再次刷新了吃货们的认知:把冷锅串串……算网融合,鹏博士云网亮相首届算网融合产品发展论坛荣获多项认可3月17日,2021年首届算网融合产品发展论坛暨CCSATC610WG4技术年会论坛在北京成功举办,参加本次论坛的有中华人民共和国工业和信息化部相关部门主管领导、电信运营商、设……圣诞节后各国港口动态汇总英国脱欧后,各港口混乱,除了英国,目前全球还有很多港口处于拥堵之中:美国:船舶在港口滞留超5天洛杉矶港执行董事吉恩塞罗卡(GeneSeroka)12月22日在媒体简……10年老车第二春!70迈行车记录仪M500体验自打家里把那辆10年老大众给我之后,我就一直想捣鼓它给它翻新一下,可查询了很多资料都没有网上的改装或者翻新案例,这车比起高尔夫来说简直是太冷门了,也就是它的宝来的MK3、MK4……腾讯视频崩了服务器如何避免宕机?【新网云资讯】昨天晚间,腾讯视频崩了热搜爆了。一大波等待看剧的网友在微博反映,腾讯视频无法打开,重启、重装都刷不出来。腾讯视频官方回应称,由于今晚用户观看热情高涨,服务器开了小……30万的车价,哪款豪华B级车最吃香?不妨看看这三款随着中国市场饱和度日益增加,车企之间竞争日益激烈,很多豪华品牌也按捺不住开启打折促销时代。如今25左右多万便可以买到一辆豪华B级轿车,要知道这在以前也只能买到普通B级车。无需多……滴滴员工吐槽校招应届生不好带,被网友群嘲随着腾讯2022校招薪资首发,白菜总包接近40万登上热榜No。1,2022秋招也拉开序幕大厂花高薪资吸引着应届生,本是想应届生能为公司带来更高价值,但是也有应届生把领导搞……美国重新对高田气囊事件调查,涉及3000万辆汽车,全要召回?高田气囊门事件大家还有印象吗?在2009年一位美国少女驾驶着汽车车祸后,车上的高田安全气囊展开后弹出了一个金属碎片,导致划破其颈动脉,失血过多而死。而正因为是这小小的安全气囊,……周朝阳第一次遇到域名被墙,整个网站废了昨天晚上发现运营的一个小网站域名被墙,心情很低落,今天上午基本没干什么事儿,一直在处理数据的事情,然后纠结还要不要重新架设。域名被墙指的是访问受到国内防火墙拦截,换句话来……颜值高又不失实力的千元烤箱选什么作为一名精致美食追求者,一直想进自己烘焙烹饪的巨坑,奈何总是没找到一款适合我这种小白想要真正好上手又不失格调的家电。在经过多种厨房电器的尝试后,现在,如果你问我什么小家电最容易……
为什么有人说全世界只有中国需要双卡手机?为什么有人说全世界只有中国需要双卡手机?看到这个问题,我首先想到的是:先问是不是,再问为什么?我咨询了下身在国外的朋友以及外国朋友得出结论:基本上是正确……请立即将您的iPhone更新到iOS14。8Apple已经发布了一套适用于iOS、macOS和watchOS的新更新,以修复一个漏洞,CitizenLab的安全研究人员表示,该漏洞很可能被利用以允许政府机构将间谍软件安装……京东腾讯入股也救不了永辉,一年时间市值仅剩三分之一如果不是永辉官宣创始人张氏兄弟签署了《关于解除一致行动的协议》,谁也不会想到曾经携手打江山的兄弟二人,竟会闹到水火不容的地步。据天眼查资料显示,两兄弟对立后,原本第一大股……因特网和互联网有什么区别?Internet,中文叫做因特网,它是有那些使用公用语言互相通信的计算机连接而成的网络,我们的计算机只要连接到它们的任何一个节点就意味着我们的计算机已经连入到Internet网……全国首个5G无人氦气飞艇在云南试飞成功图为5G彩云一号无人飞艇。何淑亭摄中新网楚雄9月11日电(何淑亭)10日,中国移动云南公司联合北京航空航天大学云南创新研究院、华为技术有限公司共同研发的5G彩云一号无人飞……江西省教育厅与腾讯公司签署战略合作框架协议来源:江西日报江西新闻客户端江西新闻客户端讯(江西日报记者蔡颖辉)8月26,江西省教育厅在南昌分别与中国电信江西公司、深圳腾讯公司签署战略合作框架协议,在专业建设及产业人……小米为什么现在不用鸿蒙?鸿蒙来了。6月2日晚上8点,鸿蒙线上发布会在万众瞩目中准时开始。华为正式发布了HarmonyOS2(以下简称鸿蒙系统),以及多款新的硬件产品,包括HUAWEIMate40……医疗数据合规观察保险触碰敏感个人信息如何探索合规之路?南方财经全媒体集团记者孙诗卉实习生周宇上海报道编者按:医疗大数据产业作为国家最早布局和推动数据要素市场的行业,正进入飞速发展时期。与此同时,去年以来,《个人信息保护……今天矿难了吗多地预出台政策限制挖矿,锁算力显卡定档5月31日今天矿难了吗?来了来了,我又来了,由于昨天没更新,所以今天来的特别早!近期能让显卡降价的消息不少啊,感觉离矿难又近了一步内蒙古出台打击虚拟货币挖矿行为的八项措施(征……快递不送货上门或被罚三万终结不告而投难在哪儿?你是否也经历过在苦守快递的过程中只等来凭取件码至xx快递柜取xx快递包裹的短信?你是否也曾遗忘快递柜中的快件,却在午夜时分收到一条快递超时即将收费的提醒信息?不过,这些或将成为……蔚来ES6技术解析蔚来的顶梁柱顶不顶得住ES6是蔚来的第二款量产车型,在ES8奠定了蔚来豪华品牌的基调后,ES6的压力小了很多,在ES8上市后一年就正式上市,节奏还是比较紧凑的,但是也由于前两款车间隔比较近,也导致了……什么原因让你一定要用iPhone?有一说一,苹果手机现在值得买的是IOS操作系统。我怕我回答这个问题主观意识太强,特意问了我妹、妹夫、表妹、表妹夫。他们都是苹果老用户了,给我的答复就是安卓广告太多,动不动就会下……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网