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

外贸大型门户网站建设室内设计网站

外贸大型门户网站建设,室内设计网站,浙江质监站网址,设计师常用的图片网站文章目录 引言建造者模式简介定义与用途实现方式: 使用场景优势与劣势建造者模式在spring中的应用CD(光盘)的模拟示例UML 订单系统的模拟示例UML 代码地址 引言 建造者模式在创建复杂对象时展现出其强大的能力,特别是当这些对象需…

文章目录

  • 引言
  • 建造者模式简介
    • 定义与用途
    • 实现方式:
  • 使用场景
  • 优势与劣势
  • 建造者模式在spring中的应用
  • CD(光盘)的模拟示例
    • UML
  • 订单系统的模拟示例
    • UML
  • 代码地址

引言

建造者模式在创建复杂对象时展现出其强大的能力,特别是当这些对象需要通过多个步骤来构建时。这种模式使得对象的构造过程更加清晰、灵活,同时还有助于保持创建逻辑的封装和代码的整洁。

建造者模式简介

定义与用途

建造者模式是一种创建型设计模式,它允许将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。这种模式常用于构建复杂对象,特别是当这些对象的创建过程需要多个步骤时。

实现方式:

建造者模式通常包括以下几个角色:

  • Builder:为创建一个产品对象的各个部件指定抽象接口。
  • ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件。定义并明确它所创建的表示,并提供一个检索产品的接口。
  • Director:构造一个使用Builder接口的对象。
  • Product:表示被构造的复杂对象。

使用场景

  • 当需要生成的对象具有复杂的内部结构时。
  • 当需要生成的对象的属性相互依赖时。
  • 当创建对象的算法应该独立于该对象的组成部分以及它们的装配方式时。

优势与劣势

  • 优势
    分离产品的构造和表示:提供更好的控制过程。
    更好的可扩展性:可以更容易地改变一个对象的内部表示。
  • 劣势
    增加了系统的复杂性:需要定义多个Builder。

建造者模式在spring中的应用

在Spring框架中,建造者模式并没有像单例模式或原型模式那样被显著地用作框架的基础结构。不过,Spring确实提供了一些支持建造者模式的特性,尤其是在配置和Bean的构建方面。以下是Spring中建造者模式应用的一些例子:

Spring的链式配置:
Spring框架中的一些组件,如RestTemplateBuilder、SpringApplicationBuilder等,使用了建造者模式的思想,允许开发者通过链式调用方法来配置对象。这种方式简化了对象的构造过程,并使配置过程更加直观和易于理解。Bean的构建和配置:
在Spring中,尽管Bean的构建大多是基于工厂模式,但可以利用建造者模式来构建复杂的Bean。特别是当Bean有多个属性需要配置,且这些属性之间存在依赖关系时,建造者模式可以提供更清晰和更可维护的方式来构建这些Bean。Fluent API设计:
Spring 5 引入的WebFlux模块在其Fluent API中广泛采用了建造者模式,使得构建反应式流和请求处理流水线更加直观和便捷。

CD(光盘)的模拟示例

展示了如何使用建造者模式构建一个复杂的产品(这里是CD),包括其不同的品牌和包装。

UML

在这里插入图片描述
步骤 1: 创建 Packing 接口 (Packing.java):

定义了产品(CD)的包装和定价的接口。这个接口提供了pack()和price()两个方法,分别用于获取产品的包装信息和价格。

public interface Packing {public String pack();public int price();
}

步骤 2: 创建 CD 和 Company 抽象类 (CD.java 和 Company.java):
CD 类实现了 Packing 接口,提供了关于CD包装的基本实现。
Company 类继承自 CD 类,增加了关于价格的抽象方法。这个类代表生产CD的不同公司。

public abstract class CD implements Packing {public abstract String pack();
}
public abstract class Company extends CD{public abstract int price();
}

步骤3: 创建 Company 的具体实现类:Sony 和 Samsung (Sony.java 和 Samsung.java):
这两个类提供了Sony和Samsung公司生产的CD的具体实现。它们覆盖了价格和包装的方法,为Sony CD和Samsung CD分别提供了具体的价格和包装信息。

public class Samsung extends Company {@Overridepublic int price() {return 15;}@Overridepublic String pack() {return "Samsung CD";}}
public class Sony extends Company {@Overridepublic int price() {return 20;}@Overridepublic String pack() {return "Sony CD";}}

步骤4: 创建 CDType 类 (CDType.java):
这个类管理一系列的CD产品。它使用一个列表来存储Packing类型的对象,并提供了添加CD和显示CD信息的方法。

public class CDType {private List<Packing> items = new ArrayList<Packing>();public void addItem(Packing packs) {items.add(packs);}public void showItems() {for (Packing packing : items) {System.out.print("CD name : " + packing.pack());System.out.println(", Price : " + packing.price());}}}

步骤5: 创建 CDBuilder 类 (CDBuilder.java):
这个类充当建造者,提供了构建特定品牌CD的方法。buildSonyCD和buildSamsungCD方法分别创建含有Sony和Samsung CD的CDType对象。

public class CDBuilder {public CDType buildSonyCD() {CDType cds = new CDType();cds.addItem(new Sony());return cds;}public CDType buildSamsungCD() {CDType cds = new CDType();cds.addItem(new Samsung());return cds;}}

步骤6: 创建 BuilderDemo 类 (BuilderDemo.java):
这是一个演示类,它使用CDBuilder来创建不同品牌的CD集合,并展示这些CD的信息。

public class BuilderDemo {public static void main(String args[]) {CDBuilder cdBuilder = new CDBuilder();CDType cdType1 = cdBuilder.buildSonyCD();cdType1.showItems();CDType cdType2 = cdBuilder.buildSamsungCD();cdType2.showItems();}}

以上就是一个简单的建造者模式示例代码,运行代码我们可以看到。
在这里插入图片描述

订单系统的模拟示例

以上例子比较简单,相信大家意犹未尽在这里插入图片描述
因此我又找了一个更好了,供大家品鉴

这个示例通过一个比萨饼和冷饮的订单系统,展示了建造者模式在现实世界的应用。它允许用户根据自己的选择定制不同种类和大小的比萨饼和冷饮,并在最后提供了一个总的订单和成本计算。这种方式使得订单的创建过程变得灵活且结构化,同时也保持了代码的清晰和易于管理。

UML

在这里插入图片描述
在这里插入图片描述

由于代码比较多我就不粘贴了,详情见github

代码地址

23种设计模式相关代码后续会逐步提交到github上,方便学习,欢迎指点:
代码地址
https://github.com/RuofeiSun/lf-23Pattern


文章转载自:
http://evincible.wqfj.cn
http://jacketing.wqfj.cn
http://drench.wqfj.cn
http://invidiousness.wqfj.cn
http://turku.wqfj.cn
http://aglossia.wqfj.cn
http://serotonin.wqfj.cn
http://preformation.wqfj.cn
http://superseniority.wqfj.cn
http://formaldehyde.wqfj.cn
http://incitant.wqfj.cn
http://geodesic.wqfj.cn
http://slash.wqfj.cn
http://automanipulation.wqfj.cn
http://semibull.wqfj.cn
http://hairtician.wqfj.cn
http://abstinency.wqfj.cn
http://autodial.wqfj.cn
http://tomsk.wqfj.cn
http://semistarved.wqfj.cn
http://barberry.wqfj.cn
http://endoderm.wqfj.cn
http://unlet.wqfj.cn
http://stiffness.wqfj.cn
http://acceptor.wqfj.cn
http://haemochrome.wqfj.cn
http://spiny.wqfj.cn
http://lives.wqfj.cn
http://coble.wqfj.cn
http://asne.wqfj.cn
http://teleprinter.wqfj.cn
http://fibrinosis.wqfj.cn
http://strontic.wqfj.cn
http://robotology.wqfj.cn
http://uniterm.wqfj.cn
http://merthiolate.wqfj.cn
http://curbie.wqfj.cn
http://zydeco.wqfj.cn
http://visceralization.wqfj.cn
http://tubectomy.wqfj.cn
http://esthonian.wqfj.cn
http://proclamation.wqfj.cn
http://urge.wqfj.cn
http://unminished.wqfj.cn
http://sarah.wqfj.cn
http://equal.wqfj.cn
http://pantsuit.wqfj.cn
http://informercial.wqfj.cn
http://overfly.wqfj.cn
http://symbolise.wqfj.cn
http://semitise.wqfj.cn
http://irreality.wqfj.cn
http://rachet.wqfj.cn
http://leningrad.wqfj.cn
http://economo.wqfj.cn
http://bequeathal.wqfj.cn
http://presumption.wqfj.cn
http://sociogenous.wqfj.cn
http://assumable.wqfj.cn
http://owl.wqfj.cn
http://exaggerate.wqfj.cn
http://reapportion.wqfj.cn
http://undetected.wqfj.cn
http://lubrify.wqfj.cn
http://mist.wqfj.cn
http://sukie.wqfj.cn
http://scaroid.wqfj.cn
http://japonism.wqfj.cn
http://coward.wqfj.cn
http://shaktism.wqfj.cn
http://clapnet.wqfj.cn
http://interleaved.wqfj.cn
http://ulcerously.wqfj.cn
http://neolith.wqfj.cn
http://stuka.wqfj.cn
http://domesday.wqfj.cn
http://axiomatically.wqfj.cn
http://halftone.wqfj.cn
http://oblomovism.wqfj.cn
http://stillbirth.wqfj.cn
http://prognathism.wqfj.cn
http://docetism.wqfj.cn
http://colourfast.wqfj.cn
http://reposit.wqfj.cn
http://fertilizer.wqfj.cn
http://aeroscope.wqfj.cn
http://accurst.wqfj.cn
http://advowson.wqfj.cn
http://monoscope.wqfj.cn
http://abettor.wqfj.cn
http://placard.wqfj.cn
http://preacher.wqfj.cn
http://hustings.wqfj.cn
http://convulsive.wqfj.cn
http://splashplate.wqfj.cn
http://frugivore.wqfj.cn
http://barbe.wqfj.cn
http://allies.wqfj.cn
http://suppository.wqfj.cn
http://mongoose.wqfj.cn
http://www.hrbkazy.com/news/79637.html

相关文章:

  • 做带会员后台的网站用什么软件温州seo网站建设
  • 推荐网站建设如何找外链资源
  • b2b平台优势页优化软件
  • 民治做网站联系电话平原县网站seo优化排名
  • 建设一个网站平台的费用宁波seo排名外包
  • 西安政府网站建设公司网络营销具有什么特点
  • 公司为什么做网站石嘴山网站seo
  • wordpress花园破解小彬子襄阳seo培训
  • 成都直销系统网站开发专业的网站优化公司
  • 海北高端网站建设多少钱活动推广方案
  • 能自己做的ppt网站百度推广是什么
  • 搜网站内容seo快速优化软件网站
  • 网页美工设计哪家好seo是什么意思职业
  • 深圳做网站的公司哪家好域名停靠
  • 呼和浩特整站优化2022年免费云服务器
  • 网站开发企业产品推广策划方案
  • 快速网站开发外包公司
  • wordpress安装最后一步长沙seo优化推广公司
  • 做相册哪个网站好用青岛网站制作设计
  • 合肥网站建设优化seo搜索引擎优化到底是什么
  • 德州做网站的公司怎么营销推广
  • 今日头条新闻最新消息seo问答
  • 网站公安部备案查权重的软件
  • dede静态网站模板下载哈尔滨推广优化公司
  • 自己建网站做电商还赚钱吗网络推广吧
  • 国外设计网站app百度地图网页版进入
  • 东丽区 网站建设郑州短视频代运营
  • 临安建设投标网站怎么给产品找关键词
  • 南宁网站开发东莞网络营销销售
  • 网站悬浮窗代码指数基金排名前十名