当前位置: 首页 > article >正文

工厂方法模式 — 设计模式

工厂方法模式(Factory Method Pattern) 是一种创建对象的设计模式。它属于创建型模式,定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法把类的实例化推迟到子类中进行。
例如,假设我们有一个汽车生产工厂的抽象概念。这个抽象工厂有一个生产汽车的方法(工厂方法),但是具体生产哪种汽车(轿车、SUV 或者跑车)由具体的工厂子类来决定。

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

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--
	}
}


http://www.kler.cn/a/369823.html

相关文章:

  • 3097. 或值至少为 K 的最短子数组 II
  • C++ list 容器用法
  • ray.rllib-入门实践-12:自定义policy
  • 基于SMPL的三维人体重建-深度学习经典方法之VIBE
  • easyexcel-导入(读取)(read)-示例及核心部件
  • FreeBSD里制作ubuntu22 jammy兼容环境的脚本
  • 【云计算】KVM虚拟化部署
  • Redis和MySQL如何保证数据一致性
  • SQLAlchemy 连接 dm
  • 基于Multisim的单双声道音频功率放大电路设计与仿真
  • 哈希及其封装实现unordermap和set
  • PSI-BLAST位点特异性矩阵PSSM和ProteinMPNN中氨基酸顺序映射
  • 华为OD机试真题---字符串摘要
  • 【含开题报告+文档+PPT+源码】基于SSM的旅游与自然保护平台开发与实现
  • 重工业数字化转型创新实践:某国家特大型钢铁企业如何快速落地基于实时数仓的数据分析平台
  • 开源模型应用落地-qwen模型小试-Qwen2.5-7B-Instruct-玩转ollama(一)
  • 【最新华为OD机试E卷-支持在线评测】机器人活动区域(200分)多语言题解-(Python/C/JavaScript/Java/Cpp)
  • 如何通过自动化有效地简化 Active Directory 操作?
  • Java基于微信小程序的童装商城的设计与实现,附源码+文档
  • 使用语言模型进行文本摘要的五个级别(llm)
  • 51单片机 复位电路
  • 解决Redis缓存穿透(缓存空对象、布隆过滤器)
  • k8s部署metallb实现service的LoadBalancer模式
  • 微信小程序地图功能开发:绘制多边形和标记点
  • kotlin等待异步任务完成
  • 100种算法【Python版】第18篇——Prim算法