36

设计模式-建造者模式

 5 years ago
source link: https://www.tuicool.com/articles/BJNbYve
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

建造者模式(Builder Pattern):将复杂对象的创建和表示分离,使同样的构建过程可以创建不同的表示。

进一步说,建造者隐藏了产品是如何组装的,使建造代码和表示代码分离。建造对象时 构件顺序稳定 的情况下,不管每一步具体怎么变都可以适用。

简单说,建造者模式将需要一系列动作才能完成的事固化下来,并定义了一个Director给客户端使用。还是很抽象的话,想想如何把大象装进冰箱:

  1. 打开冰箱门
  2. 把大象装进去
  3. 关上冰箱门

这个步骤比较简单,但如果细化一下:买冰箱、接通电源、买大象、清洗大象……很可能就会有300个步骤。建造者模式则提供了一系列行为的集合,保证以后有把山羊装进冰箱这样的需求时候不会遗漏某个步骤(想想KFC、麦当劳生产食品的步骤,其实是建造者模式不错的例子)。

代码实现如下:

package main

import (
	"fmt"
)

// 把xx装进冰箱
type inFridge interface {
	openDoor()
	putInFridge()
	closeDoor()
}
type meat struct {
	name string
}

func (m meat) openDoor()  {
	fmt.Println("Open the Door!")
}

func (m meat) closeDoor()  {
	fmt.Println("Close the Door!")
}

type pig struct {
	meat
}
func (p pig) putInFridge()  {
	fmt.Printf("Put %s in fridge \n",p.name)
}

type chicken struct {
	meat
}
func (c chicken) putInFridge()  {
	fmt.Printf("Kill the %s \n",c.name)
	fmt.Printf("Put %s in fridge \n",c.name)
}

type director struct {
	i inFridge
}
func (d director) createMeat() {
	d.i.openDoor()
	d.i.putInFridge()
	d.i.closeDoor()
}


func main() {
	p := pig{meat:meat{name:"pig"}}
	c := chicken{meat:meat{name:"chicken"}}
	
	d := director{i:p}
	d.createMeat()

	d2 := director{i:c}
	d2.createMeat()
}

代码很简单,定义了 meat 基类和 inFridge 接口,并在 pig 以及 chicken 实现。把猪肉放进冰箱和把鸡肉放进冰箱步骤是一样的,而放鸡肉时候要多进行一步“杀鸡”,所以使用建造者模式时,到底将步骤抽象提取出多少步则是需要权衡的。然后客户端通过使用 director 来创建产品(这里我偷懒了,并没返回冻肉这个产品,而仅仅是输出),无需关心具体实现步骤,实现代码解耦。


Recommend

  • 30
    • www.cnblogs.com 5 years ago
    • Cache

    设计模式—建造者模式(Builder)

    title: 设计模式—建造者模式 建造者模式(Builder)是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。建造者模式属于对象创建型模式。我们获得一个对...

  • 27
    • www.cnblogs.com 5 years ago
    • Cache

    设计模式之建造者模式

    关于建造者模式,网上已经有很多比较完善的例子,这里为了完善自己对于设计模式的内容,再简单讲解一下吧,方便自己回顾,也为了设计模式专题不遗漏任何一个设计模式 基本介绍 : 建...

  • 34

  • 29
    • studygolang.com 4 years ago
    • Cache

    Golang设计模式之建造者模式

    建造者模式 GitHub代码链接 建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象...

  • 18

    一 引言 说明:如果想要直接阅读定义等理论内容,可以直接跳转到第二大点 在生活中有很多场景与我们今天要说的 “建...

  • 3

  • 13
    • 微信 mp.weixin.qq.com 4 years ago
    • Cache

    设计模式系列| 建造者模式

    大家好,我是狼王,一个爱打球的程序员 这是设计模式的第四篇,这篇让我们来认识一下 建造者模式 1、概述 建造者模式是一种创建型设计模式, 使你能够分步骤创建复杂对象...

  • 7
    • segmentfault.com 3 years ago
    • Cache

    设计模式--建造者(Builder)模式

    将一个复杂对象的创建与他的表示分离,使得同样的构建过程可以创建不同的表示1.需要生成的对象具有复杂的内部结构;2.需要生成的对象内部属性本身相互依赖;3.与不可变对象配合使用;1.建造者独立,易扩展;2.便于控制细节...

  • 2
    • blogs.chaobei.xyz 3 years ago
    • Cache

    JAVA-设计模式-4-建造者模式

    Hello,又是拖了几天更,实在是忙的要死,有时候忙累了,真的就是倒头睡的那种,刚好今天闲下来了。今天来更新一篇建造者模式。 其实建造者模式,我们已经在上一节已经有了解过了。只不过是上一节没有提到这样的一个概念。可能大家都觉得抽象工厂模式一般...

  • 7

    建造者模式(Builder Pattern)又叫生成器模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。 建造者模式是一步一步创建一个复杂...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK