工厂方法模式 — 设计模式

工厂方法模式(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--
	}
}
相关推荐
书院门前细致的苹果16 小时前
设计模式大全:单例、工厂模式、策略模式、责任链模式
设计模式·责任链模式·策略模式
BD_Marathon1 天前
设计模式——依赖倒转原则
java·开发语言·设计模式
BD_Marathon1 天前
设计模式——里氏替换原则
java·设计模式·里氏替换原则
jmxwzy1 天前
设计模式总结
设计模式
雾江流1 天前
小米堆叠桌面6.01.05.1991 | 提前享受丝滑堆叠桌面,仅限小米手机
智能手机·软件工程
爱思德学术2 天前
中国计算机学会(CCF)推荐学术会议-C(软件工程/系统软件/程序设计语言):SPIN 2026
软件工程·软件开发
赫尔·普莱蒂科萨·帕塔2 天前
智能体工程
人工智能·机器人·软件工程·agi
J_liaty2 天前
23种设计模式一代理模式
设计模式·代理模式
雾江流2 天前
BiliPai 5.0.5 | B站开源第三方应用,纯净无广流畅
软件工程
苏渡苇2 天前
优雅应对异常,从“try-catch堆砌”到“设计驱动”
java·后端·设计模式·学习方法·责任链模式