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

网站网页制作公司淘宝客高佣金网站建设

网站网页制作公司,淘宝客高佣金网站建设,公司网络推广网站就选火13星仁德,泰顺网站建设建造者模式 建造者模式也属于创建型模式,它提供了一种创建对象的最佳方式 定义:将一个复杂对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示(假设有不同的建造者实现类,可以产生不同的产品&#xff09…

建造者模式

  • 建造者模式也属于创建型模式,它提供了一种创建对象的最佳方式

  • 定义:将一个复杂对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示(假设有不同的建造者实现类,可以产生不同的产品)

  • 主要作用:在用户不知道对象的创建过程和细节的情况下(用户只需要调指挥者来创建就可以了)就可以直接创建复杂的对象

  • 用户只需要给出指定复杂对象的类型和内容,建造者负责按顺序创建复杂对象(把内部的建造过程和细节隐藏起来)

  • 例子:

    • 工厂(建造者模式):负责制造汽车(组装过程和细节在工厂内)

    • 汽车购买者(用户):你只要说出你需要的型号(对象的类型与内容),然后可以直接购买就可以使用了(虽然不知道汽车怎么组装的(车轮、车门、发动机、方向盘等等))

  • 角色分析:

  • 既然是建造者模式,那么我们还是继续就以造房子为例子,假设将造房简化为以下步骤:

    • 地基

    • 钢筋工程

    • 铺电线

    • 粉刷

如果要盖一间房子,首先是要一个建筑公司或工程承包商(指挥者),承包商指挥工人(具体建造者)来造房子(产品),最后验收

代码展示:

首先先创建抽象建造者

package com.lyc.builder.demo01;
//抽象的建造者,只负责定义一些接口与方法
public abstract class Builder {public abstract void buildPartA();public abstract void buildPartB();public abstract void buildPartC();public abstract void buildPartD();//完工:得到产品public abstract Product getResult();
}

再创建产品类

package com.lyc.builder.demo01;import lombok.Data;//产品:房子
@Data
public class Product {private String partA;private String partB;private String partC;private String partD;
}

再创建具体建造者实现类

package com.lyc.builder.demo01;
//具体的建造者 worker是builder的具体实现,一个builder可能有几个不同的worker
public class Worker extends Builder{private Product product;public Worker(){product = new Product();}@Overridepublic void buildPartA() {product.setPartA("partA");System.out.println("partA");}@Overridepublic void buildPartB() {product.setPartB("partB");System.out.println("partB");}@Overridepublic void buildPartC() {product.setPartC("partC");System.out.println("partC");}@Overridepublic void buildPartD() {product.setPartD("partD");System.out.println("partD");}@Overridepublic Product getResult() {return product;}
}

在创建指挥类Director

package com.lyc.builder.demo01;
//指挥者 核心,负责指挥构建一个工程,工程如何构建,有他决定
public class Director {//指挥工人按照顺序建造房子public Product builder(Builder builder){//指挥者可以指挥工人按照不同的顺序执行方法,builder.buildPartA();builder.buildPartB();builder.buildPartC();builder.buildPartD();//返回产品return builder.getResult();}
}

最后进行测试

public class Test {public static void main(String[] args) {//指挥Director director = new Director();Product builder = director.builder(new Worker());System.out.println(builder.toString());}
}

细节分析:

  • 上面示例是Builder模式的常规用法,导演Director在Builder模式中具有重要的作用,它用于指导具体构建者如何构建产品控制调用先后次序并向调用者返回完整的产品类,但是有些情况下需要简化系统结构,可以把Director与抽象建造者进行结合

  • 通过静态内部类方式实现零件无序装配构造,这种方式使用更加灵活,更符合定义,内部有复杂对象的默认实现,使用时可以根据用户需求自由定义更改内容,并且无需改变具体的构造方式。就可以生产出不同复杂的产品

  • 比如:汉堡套餐,服务员(具体建造者)可以随意搭配任意几种产品组成一款套餐(产品),比第一种少了Director,主要是因为第二种方式把指挥者交给用户操作,使得产品创建更加简单灵活

第二种方式代码展示:

首先还是需要创建抽象建造类

public abstract class Builder {public abstract Builder buildPartA(String msg); //汉堡public abstract Builder buildPartB(String msg); //可乐public abstract Builder buildPartC(String msg); //薯条public abstract Builder buildPartD(String msg); //甜品// 返回产品public abstract Product getResult();
}

创建产品类(这里存放着默认的产品)

import lombok.Data;//产品:套餐
@Data
public class Product {//默认套餐private String partA = "汉堡";private String partB = "可乐";private String partC = "薯条";private String partD = "甜点";
}

具体的创建者实现类

package com.lyc.builder.demo02;
//具体建造者
public class Worker extends Builder{private Product product;public Worker(){product = new Product();}@Overridepublic Builder buildPartA(String msg) {product.setPartA(msg);return this;}@Overridepublic Builder buildPartB(String msg) {product.setPartB(msg);return this;}@Overridepublic Builder buildPartC(String msg) {product.setPartC(msg);return this;}@Overridepublic Builder buildPartD(String msg) {product.setPartD(msg);return this;}@Overridepublic Product getResult() {return product;}
}

最后进行测试

package com.lyc.builder.demo02;public class Test {public static void main(String[] args) {//服务员Worker worker = new Worker();//链式编程 :在原来的基础上,可以自由组合,如果不组合,也有默认的套餐Product result = worker.buildPartA("全家桶").buildPartB("雪碧").getResult();System.out.println(result.toString());}
}

这里将指挥者与客户端相结合,让客户端自己来进行套餐的搭配。

建造者模式与工厂模式的区别:

工厂模式是造什么,建造者模式是怎么造,一个宏观,一个微观

建造者模式优点:

  • 产品的建造与表示分离,实现了解耦,使用建造者模式可以使客户端不必知道产品内部组成的细节。

  • 将复杂的产品的创建步骤分解在不同的方法中,使得创建过程更加清晰

  • 具体的建造者类之间是相互独立的,这有利于系统的扩展,增加新的具体建造者无需修改原有类库的代码,符合“开闭原则”。

缺点:

  • 建造者模式所创建的产品一般具有较多的共同点,其组成部分相似;如果产品之间的差异性很大,则不适合使用创造者模式,因此其适用范围受到了一定的限制。

  • 如果产品的内部变化复杂,可能会导致需要定义很多具体建造者来实现这种变化,导致系统变得很庞大

应用场景:

  • 需要生成的产品对象有复杂的内部结构,这些产品对象具备共性;

  • 隔离复杂对象的创建和使用,并使得相同的创建过程可以创建不同的产品。

  • 适合于一个具有较多的零件(属性)的产品(对象)的创建过程。

建造者与抽象工厂模式的比较:

  • 与抽象工厂模式相比,建造者模式返回一个组装好的完整产品,而抽象工厂模式返回一系列相关的产品,这些产品位于不同的产品等级结构,构成了一个产品族

  • 在抽象工厂模式中,客户端实例化工厂类,然后调用工厂方法获取所需产品对象,抽象工厂模式侧重于直接通过工厂制造获得对象 而在建造者模式中客户端可以不直接调用建造者的相关方法,而是通过指挥者类来指导如何生成对象,包括对象的组装过程和建造步骤,它侧重于一步步构造一个复杂对象,返回一个完整的对象。

  • 如果将抽象工厂模式看成汽车配件生产工厂,生产一个产品族的产品,那么建造者模式就是一个汽车组装工厂,通过对部件的组装可以返回一辆完整的汽车!

我们需要清楚的认识到工厂模式与创建者模式的区别,并且勤加练习,希望对大家有所帮助

http://www.dtcms.com/a/408113.html

相关文章:

  • 在线教育类网站模板南阳网站建设哪家好
  • 网站开发运营工程师待遇网站十大品牌
  • 用npp做网站网站悬浮广告代码
  • 计算机网路-路由聚合
  • 西安做搭建网站毕业设计题网站开发
  • 网站建设刂搜金手指下拉二五网页微信下载
  • Day71 基本情报技术者 单词表06 计算理论与性能
  • 做的网站浏览器提示不安全问题做推广网站多少钱
  • 国外虚拟物品交易网站网站建站的方式主要有哪几种
  • 营销型手机网站建设西安搬家公司收费情况一览表
  • 制作自己的网站 域名怎么弄北京做网站建设的公司有哪些
  • 深圳网站推广哪家好网站建设毕业设计指导老师意见
  • 推荐网站建设小企业来说 电子商务网站服务器的建设方案
  • 住房和城乡建设部网站倪虹帝国cms收费吗
  • 用ai怎么做网站龙华网站建设网站定制
  • 网站关键词搜索排名怎么做html网页模板代码下载
  • 学校局域网站建设在网站上有中英切换怎么做
  • 低空经济未来的发展预期和从事方向?国家对这方面的政策支持有哪些?
  • 建设银行成都市第九支行 网站seo发外链的网站
  • Swish激活函数:深度学习中的自适应门控激活机制
  • 网站seo如何做好优化网站制作工作室哪家比较好
  • 网站分析对比主页网址
  • 广东食品安全员食品销售考试难度怎么样
  • 一个做网页的网站如何微信做演讲视频网站
  • dw做网站设计营销的手段和方法
  • 怎么做空包网站seo网络推广专员
  • 免费代理服务器ip地址惠州seo外包费用
  • php 网站出现乱码杨浦区公司网站建设
  • 哪个网站教做饭做的好wordpress网易云课堂
  • 外贸网站推广 sitphp手机网站源码下载