Go和Java实现建造者模式

这篇具有很好参考价值的文章主要介绍了Go和Java实现建造者模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Go和Java实现建造者模式

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

1、建造者模式

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

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

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

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

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

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

    的算法却相对稳定。

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

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

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

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

    餐"。 2、JAVA 中的 StringBuilder。

  • 优点:

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

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

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

  • 缺点:

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

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

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

  • 适用性:

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

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

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

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

注意事项:与工厂模式的区别是建造者模式更加关注与零件装配的顺序。文章来源地址https://www.toymoban.com/news/detail-631446.html

2、Go实现建造者模式

package builder

// ========== Person ==========
type Person interface {
	GetHead() string
	SetHead(string)
	GetBody() string
	SetBody(string)
	GetFoot() string
	SetFoot(string)
}
package builder

// ========== Man ==========
type Man struct {
	head string
	body string
	foot 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 string
	body string
	foot 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 builder

type 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 main

import (
	"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、Java实现建造者模式

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();
    }

    @Override
    public void buildHead() {
        person.setHead("建造男人的头");
    }

    @Override
    public void buildBody() {
        person.setBody("建造男人的身体");
    }

    @Override
    public void buildFoot() {
        person.setFoot("建造男人的脚");
    }

    @Override
    public Person buildPerson() {
        return person;
    }
}
package com.builder;

// ========== WomenBuilder ==========
public class WomenBuilder extends PersonBuilder {

    public WomenBuilder() {
        person = new Women();
    }

    @Override
    public void buildHead() {
        person.setHead("建造女人的头");
    }

    @Override
    public void buildBody() {
        person.setBody("建造女人的身体");
    }

    @Override
    public void buildFoot() {
        person.setFoot("建造女人的脚");
    }

    @Override
    public 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());

    }
}
# 输出
建造男人的身体
建造男人的脚
建造男人的头
建造女人的身体
建造女人的脚
建造女人的头

到了这里,关于Go和Java实现建造者模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java 设计模式之建造者模式

            在软件开发中,设计模式是一种被广泛使用的解决问题的方法。设计模式帮助我们更好地组织和管理代码,提供了一种可靠和可复用的设计方案。在本篇文章中,我们将重点介绍一种常用的设计模式——建造者模式,并通过一个实际的案例来演示其应用。     

    2024年02月13日
    浏览(41)
  • java设计模式之 - 建造者模式

    建造者模式(Builder Pattern)是一种创建型设计模式,它通过将对象的构建过程分离出来,使得同样的构建过程可以创建不同的表示形式。 简单来说,建造者模式允许你按步骤创建复杂的对象,同时将对象的构建与其表示分离。 主要解决的问题是当创建一个复杂对象时,如果

    2024年02月16日
    浏览(55)
  • Java建造者设计模式

    建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。 Builder(抽象建造者) :它为创建一个产

    2024年02月15日
    浏览(33)
  • Java特性之设计模式【建造者模式】

    概述 建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式 一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的 主要解决 :主要解决在软件系统中,有

    2024年02月07日
    浏览(42)
  • Java与设计模式(6):建造者模式

    建造者模式(Builder Pattern)是一种创建型设计模式,它允许你逐步构造复杂对象。该模式将对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。 建造者模式的核心思想是将一个复杂对象的构建过程分解为多个简单的步骤,通过一系列的步骤来逐步构建对

    2024年02月11日
    浏览(36)
  • JAVA设计模式第九章:建造者模式

    通过将对象的构建过程从表现层隔离出来,使得相同的构建过程可以用来创建不同的表现形式 用于简化和优化复杂对象的创建过程,提高创建效率和代码可读性; Product(产品角色): 要创建的产品对象 Builder(抽象建造者): 创建产品以及部件的接口定义 ConcreateBuilder(具体建造者): 抽

    2024年02月19日
    浏览(35)
  • 【Java设计模式】建造者模式 & 注解@Builder

    将一个复杂对象的构造与它的表示分离 ,使同样的构建过程可以创建不同的表示。它使将一个复杂的对象分解成多个简单的对象,然后一步步构建而成。 每一个具体建造者都相对独立,而与其它的具体建造者无关,因此可以很方便地替换具体建造者或增加新的具体建造者,

    2024年02月14日
    浏览(41)
  • 设计模式-建造者模式在Java中使用示例

    复杂对象的组装与创建 没有人买车会只买一个轮胎或者方向盘,大家买的都是一辆包含轮胎、方向盘和发动机等多个部件的完整汽车。 如何将这些部件组装成一辆完整的汽车并返回给用户,这是建造者模式需要解决的问题。 建造者模式又称为生成器模式,它是一种较为复杂

    2024年02月16日
    浏览(48)
  • 【Java 设计模式】创建型之建造者模式

    在软件开发中,建造者模式是一种创建型设计模式, 它将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示 。建造者模式通常包括一个指导者(Director)类和多个建造者(Builder)类,指导者负责组织建造者的构建过程,而建造者负责具体的构建步

    2024年01月21日
    浏览(54)
  • Java设计模式之建造者模式详解(Builder Pattern)

    在日常的开发工作中,我们常常需要创建一些复杂的对象。这些对象可能包含许多不同的属性,并且这些属性的初始化过程可能相当复杂。在这种情况下,建造者模式是一种非常有用的设计模式,因为它允许我们分步骤地创建复杂的对象。 概念和原理: 建造者模式(Builder

    2024年02月09日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包