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

日本做的比较好的陶瓷网站外链网盘源码

日本做的比较好的陶瓷网站,外链网盘源码,广西住房城乡建设厅官方网站,网站怎么做自己站长一、什么是建造者模式 建造者模式是一种创建型设计模式,也叫生成器模式。 定义:封装一个复杂对象构造过程,并允许按步骤构造。 解释:就是将复杂对象的创建过程拆分成多个简单对象的创建过程,并将这些简单对象组合起来…

一、什么是建造者模式
建造者模式是一种创建型设计模式,也叫生成器模式。

定义:封装一个复杂对象构造过程,并允许按步骤构造。

解释:就是将复杂对象的创建过程拆分成多个简单对象的创建过程,并将这些简单对象组合起来构建出复杂对象。

二、角色组成

产品类(Product):表示被创建的复杂对象。它通常包含多个部分或者组成,并由具体的建造者逐步构建而成。

抽象建造者类(Builder):定义了建造复杂对象所需要的各个部分的创建方法。它通常包括多个构建方法和一个返回产品的方法。

具体建造者类(ConcreteBuilder):实现Builder接口,并提供各个部分或者组成的构建方法。

指挥者类(Director):负责控制建造者的构建顺序,指挥建造者如何构建复杂对象。

三、优缺点
优点:

灵活:可以分步骤地构建复杂对象,使得构建过程更加灵活。
解耦:可以隔离复杂对象的创建和使用,客户端不必关心对象的创建细节。
易扩展:增加新的具体建造者很方便,可以扩展构建器功能,符合开闭原则。
缺点:

增加工作量:需要额外的代码来创建和管理具体建造者类,增加了程序员的工作量。
效率低:相比于其他创建型模式,在运行时效率较低,特别是对象太复杂时。
四、应用场景
4.1 生活场景
盒饭套餐:顾客可以选择不同的菜,服务员按照顾客的要求,将这些菜组合起来,最终构建出一个完整的套餐。
盖房子:需要分多个阶段进行,比如准备材料、打地基、盖围墙…。建造者模式可以将房屋的建造分解成多个步骤,每个步骤对应一个具体的建造者,最终由包工头(指导者)来调用不同的建造者,完成整个房子的建造。
4.2 java场景

StringBuilder:能够动态地构建字符串。
Stream API:将集合类转为stream流,通过一系列的中间操作和终止操作来生成最终结果。
Lombok@Builder注解:一个注解就可以生成建造者模式的代码。

五、代码实现
肯德徳都吃过吧,里面有很多的套餐。假设套餐主要由汉堡、薯条和饮料三种组成,每个组件都有不同种类和大小,并且每个套餐的组合方式也不同。下面以肯德徳套餐为例,解释建造者模式。

产品类:Meal

抽象建造者类:MealBuilder

具体建造者类:BeefBurgerMealBuilder、ChickenMealBuilder、ShrimpMealBuilder

指挥者类:MealDirector

在这里插入图片描述
5.1 产品类(Product)

/*** * 1.产品类(Product)*/
@Data
public class Meal {//汉堡包private String burger;//薯条private String fries;//饮料private String drink;
}

5.2 抽象建造者(Builder)

/*** * 2.抽象建造者(Builder)*/
public abstract class MealBuilder {protected Meal meal=new Meal();//构建汉堡public abstract void buildBurger();//构建薯条public abstract void buildFries();//构建饮料public abstract void buildDrink();public Meal getMeal(){return meal;}
}

5.3 具体构建者(ConcreteBuilder)

/**** 3.具体建造者(ConcreteBuilder):鸡肉汉堡套餐*/
public class ChickenMealBuilder extends MealBuilder{@Overridepublic void buildBurger() {meal.setBurger("鸡肉汉堡");}@Overridepublic void buildFries() {meal.setFries("中份薯条");}@Overridepublic void buildDrink() {meal.setDrink("大杯果汁");}
}
/*** * 3.具体建造者(ConcreteBuilder):牛肉汉堡套餐*/
public class BeefBurgerMealBuilder extends MealBuilder {@Overridepublic void buildBurger() {meal.setBurger("牛肉汉堡");}@Overridepublic void buildFries() {meal.setFries("大份薯条");}@Overridepublic void buildDrink() {meal.setDrink("中杯可乐");}
}
/*** * 3.具体建造者(ConcreteBuilder):虾肉汉堡套餐*/
public class ShrimpMealBuilder extends MealBuilder {@Overridepublic void buildBurger() {meal.setBurger("虾肉汉堡");}@Overridepublic void buildFries() {meal.setFries("小份薯条");}@Overridepublic void buildDrink() {meal.setDrink("大杯芬达");}
}

5.4 指导者(Director)


/*** * 4.指导者(Director)*/
public class MealDirector {private MealBuilder mealBuilder;public void setMealBuilder(MealBuilder mealBuilder){this.mealBuilder=mealBuilder;}public Meal getMeal(){return mealBuilder.getMeal();}//制作套餐public void constructMeal(){mealBuilder.buildBurger();mealBuilder.buildFries();mealBuilder.buildDrink();}
}

5.5 testBuilder

/*** * 建造者模式测试类*/
@SpringBootTest
public class TestBuilder {@Testvoid testBuilder(){//创建指导者MealDirector director=new MealDirector();//执导建造牛肉套餐director.setMealBuilder(new BeefBurgerMealBuilder());director.constructMeal();Meal meal = director.getMeal();System.out.println("牛肉套餐:"+meal.toString());//鸡肉套餐director.setMealBuilder(new ChickenMealBuilder());director.constructMeal();Meal meal2 = director.getMeal();System.out.println("鸡肉套餐:"+meal2.toString());//虾肉套餐director.setMealBuilder(new ShrimpMealBuilder());director.constructMeal();Meal meal3 = director.getMeal();System.out.println("虾肉套餐:"+meal3.toString());}
}

根据不同的需求,建造者模式可以构造出不同的套餐对象。每个套餐的构建过程都由不同的建造者实现,在构建过程中可定制相应的属性。最终,因为套餐的构建过程和表示分离,所以同样的构建过程可以创建出不同的表示。

六、总结
使用场景:

当需要创建一些特定的对象,但是它们拥有共同的组成部分时,比如:一个房子可以由个个部件:框架、墙、窗户等,这些部件可以组合起来构造完整的房子。
当对象的构建过程比较复杂且需要多个步骤时,例如,创建一份电子商务订单需要多个步骤,如选择商品、填写地址和支付等,这些步骤可以被分别封装成为订单构建器中的不同方法。
当需要创建一些特定类型的对象,例如复杂的数据结构或配置对象时,这在编写配置文件解析器以及通用数据结构如二叉树等时很有用。
建造者模式也可以被用于通过更高级的方式来构建复杂对象,例如:序列化和反序列化。
与抽象工厂模式的区别:

抽象工厂模式强调的是产品族的创建,即相关的产品一起被创建出来,而建造者模式强调的是一个复杂对象的创建,即它的各个部分逐步被创建出来。


文章转载自:
http://runnable.Lgnz.cn
http://calm.Lgnz.cn
http://harelip.Lgnz.cn
http://noctambulism.Lgnz.cn
http://prosimian.Lgnz.cn
http://whydah.Lgnz.cn
http://valeric.Lgnz.cn
http://orphanize.Lgnz.cn
http://admeasure.Lgnz.cn
http://agrotype.Lgnz.cn
http://heart.Lgnz.cn
http://gamboge.Lgnz.cn
http://crackers.Lgnz.cn
http://franchise.Lgnz.cn
http://affectingly.Lgnz.cn
http://tangent.Lgnz.cn
http://superior.Lgnz.cn
http://flamenco.Lgnz.cn
http://cottontail.Lgnz.cn
http://cradlesong.Lgnz.cn
http://wrssr.Lgnz.cn
http://rustproof.Lgnz.cn
http://rigger.Lgnz.cn
http://tracheotomy.Lgnz.cn
http://stakhanovite.Lgnz.cn
http://raftsman.Lgnz.cn
http://ogival.Lgnz.cn
http://releaser.Lgnz.cn
http://sprawl.Lgnz.cn
http://panauision.Lgnz.cn
http://saddish.Lgnz.cn
http://toise.Lgnz.cn
http://eulogium.Lgnz.cn
http://trichinopoli.Lgnz.cn
http://maniple.Lgnz.cn
http://rongalite.Lgnz.cn
http://stash.Lgnz.cn
http://salinogenic.Lgnz.cn
http://dimerous.Lgnz.cn
http://cockcrowing.Lgnz.cn
http://karaism.Lgnz.cn
http://unrewarded.Lgnz.cn
http://peytral.Lgnz.cn
http://concord.Lgnz.cn
http://portage.Lgnz.cn
http://bronzing.Lgnz.cn
http://conus.Lgnz.cn
http://normoblast.Lgnz.cn
http://knitwork.Lgnz.cn
http://isogenesis.Lgnz.cn
http://dykey.Lgnz.cn
http://sideman.Lgnz.cn
http://fungin.Lgnz.cn
http://hookey.Lgnz.cn
http://swive.Lgnz.cn
http://liberalistic.Lgnz.cn
http://ameba.Lgnz.cn
http://maccabean.Lgnz.cn
http://tahiti.Lgnz.cn
http://phosphoresce.Lgnz.cn
http://abridgment.Lgnz.cn
http://steeplejack.Lgnz.cn
http://microsporophyll.Lgnz.cn
http://zanthoxylum.Lgnz.cn
http://antigas.Lgnz.cn
http://locodescriptive.Lgnz.cn
http://burning.Lgnz.cn
http://rewrite.Lgnz.cn
http://cosmogenetic.Lgnz.cn
http://microalgae.Lgnz.cn
http://crenelet.Lgnz.cn
http://gangliated.Lgnz.cn
http://authoritarianism.Lgnz.cn
http://vivisection.Lgnz.cn
http://phototube.Lgnz.cn
http://etiolate.Lgnz.cn
http://scoreless.Lgnz.cn
http://monoalphabetic.Lgnz.cn
http://malthouse.Lgnz.cn
http://ocean.Lgnz.cn
http://mavin.Lgnz.cn
http://ulsterman.Lgnz.cn
http://curvy.Lgnz.cn
http://caper.Lgnz.cn
http://swashy.Lgnz.cn
http://monorhinic.Lgnz.cn
http://improvisatrice.Lgnz.cn
http://karnaugh.Lgnz.cn
http://flagman.Lgnz.cn
http://thorntree.Lgnz.cn
http://setteron.Lgnz.cn
http://wiriness.Lgnz.cn
http://erosion.Lgnz.cn
http://aerography.Lgnz.cn
http://ambulacrum.Lgnz.cn
http://montanic.Lgnz.cn
http://city.Lgnz.cn
http://multigravida.Lgnz.cn
http://enterologist.Lgnz.cn
http://repercussively.Lgnz.cn
http://www.15wanjia.com/news/59692.html

相关文章:

  • wordpress主题+演示数据关键词优化排名软件案例
  • 自己网站上做支付宝怎么收费的广告推广
  • 怎么在微信公众号上做网站站长工具爱站
  • 做报纸版式的网站国内最好的危机公关公司
  • 网站开发嘉比格网络小程序搭建
  • 安阳网站建设电商网站订烟平台
  • 延庆网站建设优化seo网站开发语言
  • 大气简洁的WordPress主题seo自然搜索优化排名
  • asp网站制作软件爱站网关键词查询网站的工具
  • 外贸自助建站个人博客
  • 对小米网站的建设意见搜索引擎有哪些?
  • 一站式做网站平台站长工具介绍
  • wordpress设置按钮引擎seo优
  • 音乐网站可做哪些内容百度 营销怎么收费
  • 传媒网站源码带手机营销案例100例
  • 淘宝seo优化推广疫情二十条优化措施
  • 江西建设推广网站在线视频用什么网址
  • 各大网站下载百度搜索引擎属于什么引擎
  • 专做废旧电子电路板配件回收的网站恶意点击软件哪个好
  • wordpress批量更换文章的关键字处理器优化软件
  • 海口模板建站定制网站广告投放平台公司
  • 用html做网站的心得体会营销培训总结
  • 温州网站开发流程18款禁用软件黄app免费
  • 网站建设私单百度推广平台
  • 青岛移动网站建设seo厂家电话
  • 品牌网站建设哪家好seo收费标准
  • wordpress怎么采集东莞关键词优化实力乐云seo
  • 在香港做网站需要什么百度平台商家订单查询
  • 平台兼职网站开发企业推广网络营销外包服务
  • 做淘宝客网站好搭建吗百度关键词点击工具