go语言设计模式之工厂模式(字节教育)

go语言设计模式之工厂模式

工厂模式

工厂模式(Factory Pattern)是最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,创建对象时不会对客户端暴露创建逻辑,并且时通过使用一个共同的接口来执行新的创建的对象。

优点

  1. 一个调用者想创建一个对象,只知道对象名称就可以了;
  2. 扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以;
  3. 屏蔽产品的具体实现,调用者只关心产品的接口;

缺点

  1. 每增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖,这并不是什么好事;

实现

我们将创建一个Shape接口和实现Shape接口的实体类。下一步时定义一个工厂类ShapeFactory。FactoryPatternDemo,演示类使用ShapeFactory来获取Shape对象。它将向ShapeFactory传递信息(CIRCLE/RECTANGLE/SQUARE),一边获取它所需对象的类型。

在这里插入图片描述

代码

package main

import "fmt"

//创建一个借口
type Shape interface {
	Draw()
}

//实现接口的试题类型:矩形
type Rectangle struct {
}

func (this Rectangle) Draw() {
	fmt.Println("Inside Rectangle::draw() method.")
}

//实现接口的试题类型:正方形
type Square struct {
}

func (this Square) Draw() {
	fmt.Println("Inside Square::draw() method.")
}

//实现接口的试题类型:圆形
type Circle struct {
}

func (this Circle) Draw() {
	fmt.Println("Inside Square::draw() method.")
}

//创建一个工厂,生成基于给定信息的实体类的对象
type ShapeFactory struct {
}

//使用getShape方法获取性转类型的对象
func (this ShapeFactory) getShape(shapeType string) Shape {
	if shapeType == "" {
		return nil
	}
	if shapeType == "CIRCLE" {
		return Circle{}
	} else if shapeType == "RECTANCLE" {
		return Rectangle{}
	} else if shapeType == "SQUARE" {
		return Square{}
	}
	return nil
}

func main() {
	factory := ShapeFactory{}
	factory.getShape("CIRCLE").Draw()
	factory.getShape("RECTANCLE").Draw()
	factory.getShape("SQUARE").Draw()
}

输出

Inside Square::draw() method.
Inside Rectangle::draw() method.
Inside Square::draw() method.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值