工厂方法模式 — 设计模式

工厂方法模式(Factory Method Pattern) 是一种创建对象的设计模式。它属于创建型模式,定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法把类的实例化推迟到子类中进行。

例如,假设我们有一个汽车生产工厂的抽象概念。这个抽象工厂有一个生产汽车的方法(工厂方法),但是具体生产哪种汽车(轿车、SUV 或者跑车)由具体的工厂子类来决定。

https://kamacoder.com/problempage.php?pid=1076

go 复制代码
package main

import (
	"fmt"
)

// 积木接口
type IBuildBlock interface {
	Produce()
}

// 圆形积木
type CircleBlock struct{}

func (c *CircleBlock) Produce() {
	fmt.Println("Circle Block")
}

// 方形积木
type SquareBlock struct{}

func (s *SquareBlock) Produce() {
	fmt.Println("Square Block")
}

// 工厂接口
type IBlockFactory interface {
	ProduceWood() IBuildBlock
}

// 圆形积木工厂
type CircelBlockFactory struct{}

func (c *CircelBlockFactory) ProduceWood() IBuildBlock {
	return &CircleBlock{}
}

// 方形积木工厂
type SquareBlockFactory struct{}

func (s *SquareBlockFactory) ProduceWood() IBuildBlock {
	return &SquareBlock{}
}

type BlockFactory struct {
}

func (b *BlockFactory) ProduceBlockWood(factory IBlockFactory, count int) {
	for count > 0 {
		var block = factory.ProduceWood()
		block.Produce()
		count--
	}
}

func main() {
	var factory = &BlockFactory{}

	var n int
	fmt.Scan(&n)
	for n > 0 {
		var str string
		var count int
		fmt.Scan(&str, &count)
		if str == "Circle" {
			factory.ProduceBlockWood(&CircelBlockFactory{}, count)
		} else {
			factory.ProduceBlockWood(&SquareBlockFactory{}, count)
		}
		n--
	}
}
相关推荐
AM越.17 小时前
Java设计模式超详解--观察者设计模式
java·开发语言·设计模式
ezreal_pan17 小时前
基于券类型路由的渐进式重构:函数式选项模式与管道模式的完美结合
设计模式·重构·golang·选项函数
有一个好名字17 小时前
设计模式-单例模式
java·单例模式·设计模式
赵得C18 小时前
2025下半年软件设计师考前几页纸
java·开发语言·分布式·设计模式·性能优化·软考·软件设计师
郝学胜-神的一滴18 小时前
Linux下创建线程:从入门到实践
linux·服务器·开发语言·c++·程序人生·软件工程
alibli19 小时前
Alibli深度理解设计模式系列教程
c++·设计模式
老朱佩琪!19 小时前
Unity迭代器模式
unity·设计模式·迭代器模式
是2的10次方啊20 小时前
🎭 程序员的一天:12种设计模式藏在你身边
设计模式
郝学胜-神的一滴20 小时前
使用Qt OpenGL开发俄罗斯方块:从零到一实现经典游戏
c++·qt·程序人生·游戏·设计模式·系统架构·图形渲染
明洞日记20 小时前
【设计模式手册018】访问者模式 - 分离数据结构与操作
数据结构·设计模式·访问者模式