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

邯郸建设局公开网站网络文章发布平台

邯郸建设局公开网站,网络文章发布平台,网站虚拟机从头做有影响吗,济南网站建设兼职Go和Java实现建造者模式 下面通过一个构造人身体不同部位的案例来说明构造者模式的使用。 1、建造者模式 建造者模式使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了 一种创建对象的最佳方式。 一个 Builder 类会…

Go和Java实现建造者模式

下面通过一个构造人身体不同部位的案例来说明构造者模式的使用。

1、建造者模式

建造者模式使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了

一种创建对象的最佳方式。

一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。

  • 意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。

  • 主要解决:主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用

    一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起

    的算法却相对稳定。

  • 何时使用:一些基本部件不会变,而其组合经常变化的时候。

  • 如何解决:将变与不变分离开。

  • 关键代码:建造者:创建和提供实例,导演:管理建造出来的实例的依赖关系。

  • 应用实例:1、去肯德基,汉堡、可乐、薯条、炸鸡翅等是不变的,而其组合是经常变化的,生成出所谓的"套

    餐"。 2、JAVA 中的 StringBuilder。

  • 优点:

    分离构建过程和表示,使得构建过程更加灵活,可以构建不同的表示。

    可以更好地控制构建过程,隐藏具体构建细节。

    代码复用性高,可以在不同的构建过程中重复使用相同的建造者。

  • 缺点:

    如果产品的属性较少,建造者模式可能会导致代码冗余。

    建造者模式增加了系统的类和对象数量。

  • 使用场景:1、需要生成的对象具有复杂的内部结构。 2、需要生成的对象内部属性本身相互依赖。

  • 适用性:

    当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。

    当构造过程必须允许被构造的对象有不同的表示时。

建造者模式在创建复杂对象时非常有用,特别是当对象的构建过程涉及多个步骤或参数时。它可以提供更好的灵活

性和可维护性,同时使得代码更加清晰可读。

注意事项:与工厂模式的区别是建造者模式更加关注与零件装配的顺序。

2、Java实现建造者模式

package builder// ========== Person ==========
type Person interface {GetHead() stringSetHead(string)GetBody() stringSetBody(string)GetFoot() stringSetFoot(string)
}
package builder// ========== Man ==========
type Man struct {head stringbody stringfoot string
}func (man *Man) GetHead() string {return man.head
}func (man *Man) SetHead(head string) {man.head = head
}func (man *Man) GetBody() string {return man.body
}func (man *Man) SetBody(body string) {man.body = body
}func (man *Man) GetFoot() string {return man.foot
}func (man *Man) SetFoot(foot string) {man.foot = foot
}
package builder// ========== Women ==========
type Women struct {head stringbody stringfoot string
}func (women *Women) GetHead() string {return women.head
}func (women *Women) SetHead(head string) {women.head = head
}func (women *Women) GetBody() string {return women.body
}func (women *Women) SetBody(body string) {women.body = body
}func (women *Women) GetFoot() string {return women.foot
}func (women *Women) setFoot(foot string) {women.foot = foot
}
package builder// ========== PersonBuilder ==========
type PersonBuilder interface {buildHead()buildBody()buildFoot()buildPerson() Person
}
package builder// ========== ManBuilder ==========
type ManBuilder struct {person Person
}func NewManBuilder() *ManBuilder {return &ManBuilder{person: &Man{}}
}func (manBuilder *ManBuilder) buildHead() {manBuilder.person.SetHead("建造男人的头")
}func (manBuilder *ManBuilder) buildBody() {manBuilder.person.SetBody("建造男人的身体")
}func (manBuilder *ManBuilder) buildFoot() {manBuilder.person.SetFoot("建造男人的脚")
}func (manBuilder *ManBuilder) buildPerson() Person {return manBuilder.person
}
package builder// ========== WomenBuilder ==========
type WomenBuilder struct {person Person
}func NewWomenBuilder() *WomenBuilder {return &WomenBuilder{person: &Man{},}
}func (womenBuilder *WomenBuilder) buildHead() {womenBuilder.person.SetHead("建造女人的头")
}func (womenBuilder *WomenBuilder) buildBody() {womenBuilder.person.SetBody("建造女人的身体")
}func (womenBuilder *WomenBuilder) buildFoot() {womenBuilder.person.SetFoot("建造女人的脚")
}func (womenBuilder *WomenBuilder) buildPerson() Person {return womenBuilder.person
}
package buildertype PersonDirector struct {builder PersonBuilder
}func (pd *PersonDirector) SetBuilder(pb PersonBuilder) {pd.builder = pb
}func NewDirector(p PersonBuilder) *PersonDirector {return &PersonDirector{builder: p,}
}func (d *PersonDirector) BuildPerson() Person {d.builder.buildHead()d.builder.buildBody()d.builder.buildFoot()return d.builder.buildPerson()
}
package mainimport ("fmt". "proj/builder"
)func main() {womenBuilder := NewWomenBuilder()manBuilder := NewManBuilder()director := NewDirector(womenBuilder)women := director.BuildPerson()fmt.Println(women.GetHead())fmt.Println(women.GetBody())fmt.Println(women.GetFoot())director.SetBuilder(manBuilder)man := director.BuildPerson()fmt.Println(man.GetHead())fmt.Println(man.GetBody())fmt.Println(man.GetFoot())
}
# 输出
建造女人的头
建造女人的身体
建造女人的脚
建造男人的头
建造男人的身体
建造男人的脚

3、Go实现建造者模式

package com.builder;// ========== Person ==========
public class Person {private String head;private String body;private String foot;public String getHead() {return head;}public void setHead(String head) {this.head = head;}public String getBody() {return body;}public void setBody(String body) {this.body = body;}public String getFoot() {return foot;}public void setFoot(String foot) {this.foot = foot;}
}
package com.builder;// ========== Man ==========
public class Man extends Person {}
package com.builder;// ========== Women ==========
public class Women extends Person {
}
package com.builder;// ========== PersonBuilder ==========
public abstract class PersonBuilder {Person person;abstract void buildHead();abstract void buildBody();abstract void buildFoot();abstract Person buildPerson();}
package com.builder;// ========== ManBuilder ==========
public class ManBuilder extends PersonBuilder {public ManBuilder() {person = new Man();}@Overridepublic void buildHead() {person.setHead("建造男人的头");}@Overridepublic void buildBody() {person.setBody("建造男人的身体");}@Overridepublic void buildFoot() {person.setFoot("建造男人的脚");}@Overridepublic Person buildPerson() {return person;}
}
package com.builder;// ========== WomenBuilder ==========
public class WomenBuilder extends PersonBuilder {public WomenBuilder() {person = new Women();}@Overridepublic void buildHead() {person.setHead("建造女人的头");}@Overridepublic void buildBody() {person.setBody("建造女人的身体");}@Overridepublic void buildFoot() {person.setFoot("建造女人的脚");}@Overridepublic Person buildPerson() {return person;}}
package com.builder;public class Test {public static void main(String[] args) {PersonDirector pd = new PersonDirector();Person person = null;person = pd.constructPerson(new ManBuilder());System.out.println(person.getBody());System.out.println(person.getFoot());System.out.println(person.getHead());person = pd.constructPerson(new WomenBuilder());System.out.println(person.getBody());System.out.println(person.getFoot());System.out.println(person.getHead());}
}
# 输出
建造男人的身体
建造男人的脚
建造男人的头
建造女人的身体
建造女人的脚
建造女人的头
http://www.hkea.cn/news/413717/

相关文章:

  • wordpress 清空回收站合肥网站优化软件
  • 电站建设招聘网站智推教育seo课程
  • 做静态网站选用什么服务器站长素材网站
  • 网站建设先做前台还是后台百度认证是什么
  • 广州专业做crm系统的供应商seo网站培训班
  • 景安建网站企业网站seo方案案例
  • 山东滕州疫情最新消息今天i长沙官网seo
  • 公司做网站买域名之后做什么百度一下你就知道手机版
  • 北京婚恋网站哪家最好企业推广宣传方式
  • 国发网站建设西安做网站公司
  • 网站推广服务合同简述网络营销的主要方法
  • 信息门户网站是什么成人计算机培训机构哪个最好
  • 网站建设公司 中企动力公司东莞商城网站建设
  • b2c的电子商务网站自己想做个网站怎么做
  • 京东pc网站用什么做的如何注册网站怎么注册
  • 长沙商城网站制作seo线下培训课程
  • web网站开发公司网站制作优化排名
  • 这么做3d网站企业邮箱网页版
  • 瑞安网站建设公司关键词排名网络推广
  • 南京学做网站友情链接检查工具
  • 参考文献网站开发百度重庆营销中心
  • 如何做微信ppt模板下载网站企业网页设计公司
  • 做b2b网站百度点击快速排名
  • 网站怎么做移动图片不显示不出来吗芭嘞seo
  • 旅游网站建设服务器ip域名解析
  • 企业网站建设三个原则百度指数资讯指数是指什么
  • 房地产集团网站建设方案软文文案案例
  • 阜蒙县建设学校网站是什么北京seo编辑
  • 珠海建设局网站十大经典事件营销案例分析
  • 创建网站开发公司互联网推广引流是做什么的