GO设计模式——1、简单工厂模式(创建型)

目录

简单工厂模式(Simple Factory Pattern)

简单工厂模式的核心角色

优缺点

代码实现


简单工厂模式(Simple Factory Pattern)

        简单工厂模式又称为静态工厂方法(Static Factory Method)模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

简单工厂模式的核心角色

        1、抽象产品(Abstract Product):是简单工厂创建的所有对象的抽象父类/接口,负责描述所有实例的行为。

        2、具体产品(Concrete Product):是简单工厂模式的创建目标。

        3、简单工厂:是简单工厂模式的核心,负责实现创建所有实例的内部逻辑。工厂类的创建产品类的方法可以被外界直接调用,创建所需的产品对象。

优缺点

        (1)优点:简单。

        (2)缺点:如果具体产品扩产,就必须修改工厂内部,增加Case,一旦产品过多就会导致简单工厂过于臃肿。

代码实现

package mainimport "fmt"// (抽象产品)Printer 简单工厂要返回的接口类型
type Printer interface {Print(name string) string
}// (具体产品)CnPrinter 是 Printer 接口的实现,它说中文
type CnPrinter struct {
}func (*CnPrinter) Print(name string) string {return fmt.Sprintf("你好,%s", name)
}// (具体产品)EnPrinter 是 Printer 接口的实现,它说中文
type EnPrinter struct {
}func (*EnPrinter) Print(name string) string {return fmt.Sprintf("Hello,%s", name)
}// (工厂)
type Factory struct {
}func (f Factory) NewPrinter(lang string) Printer {switch lang {case "cn":return new(CnPrinter)case "en":return new(EnPrinter)default:return new(CnPrinter)}
}func main() {// 创建一个工厂类,在应用中可以将这个工厂类实例作为一个全局变量factory := new(Factory)// 在工厂类中传入不同的参数,获取不同的实例ePrinter := factory.NewPrinter("en")fmt.Println(ePrinter.Print("Zhang"))cPrinter := factory.NewPrinter("cn")fmt.Println(cPrinter.Print("张"))
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/204141.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

性能调优入门

从公众号转载,关注微信公众号掌握更多技术动态 --------------------------------------------------------------- 一、性能定律和数理基础 1.三个定律法则 (1)帕累托法则 我它也被称为 80/20 法则、关键少数法则,或者八二法则。人们在生活中发现很多…

Ubuntur编译ROS报错:error PCL requires C++14 or above

ubuntu20.04 编译ROS包 报错: error: PCL requires C14 or above: 修改Cmakelists.txt文件: set(CMAKE_CXX_STANDARD 14) 再次编译成功.

用 Bytebase 做数据库 schema 迁移

数据库 schema 迁移指修改管理数据库结构的变更,包括为数据库添加视图或表、更改字段类型或定义新约束。Bytebase 提供了可视化 GUI 方便迁移数据库 schema,本教程将展示如何使用 Bytebase 为 schema 迁移配上 SQL 审核,自定义审批流&#xf…

Linux: sudo: unable to execute /opt/sbin/adm: No such file or directory

sudo: unable to execute /opt/sbin/adm: No such file or directory 这个错误有可能的原因是,sudo的设置里权限配置不对。 比如其他用户不应该有可执行权限,但是这个命令有,就不让执行。 但是这个错误提示有点让人迷惑,可能也是故意的。 另一个原因是:https://mzhan017…

HashMap和Hashtable的区别

一、简介 HashMap: 1、HashMap是非线程安全的,只是用于单线程环境下,多线程环境下可以采用concurrent并发包下的concurrentHashMap。 2、HashMap 实现了Serializable接口,因此它支持序列化,实现了Cloneable接口,能被…

改造python3中的http.server为简单的文件上传下载服务

改造 修改python3中的http.server.SimpleHTTPRequestHandler,实现简单的文件上传下载服务 simple_http_file_server.py: # !/usr/bin/env python3import datetime import email import html import http.server import io import mimetypes import os …

UDP协议实现群聊

服务端 package ydd;import java.io.*; import java.net.*; import java.util.ArrayList; public class A2{public static ServerSocket server_socket;public static ArrayList<Socket> socketListnew ArrayList<Socket>(); public static void main(String []a…

【C++】如何优雅地把二维数组初始化为0

2023年12月7日&#xff0c;周四上午 目录 为什么要初始化二维数组不优雅的初始化方式&#xff1a;使用两个for循环优雅的初始化方式一&#xff1a;使用初始化列表优雅的初始化方式二&#xff1a;使用memset函数 为什么要初始化二维数组 如果不初始化二维数组&#xff0c;那么…

点评项目——短信登陆模块

2023.12.6 短信登陆如果基于session来实现&#xff0c;会存在session共享问题&#xff1a;多台Tomcat不能共享session存储空间&#xff0c;这会导致当请求切换到不同服务器时出现数据丢失的问题。 早期的解决办法是让session提供一个数据拷贝的功能&#xff0c;即让各个Tomcat的…

【Python】流畅!一个非常好用的网络数据采集工具!

文章目录 前言一、注册二、初窥三 数据集四 自定义网站网络爬虫总结 前言 你是否曾为获取重要数据而感到困扰&#xff1f;是否因为数据封锁而无法获取所需信息&#xff1f;是否因为数据格式混乱而头疼&#xff1f;现在&#xff0c;所有这些问题都可以迎刃而解。让我为大家介绍…

【数据结构】——二叉树简答题模板

目录 一、树和二叉树的概念&#xff08;一&#xff09;二叉树的定义和性质&#xff08;二&#xff09;树和二叉树的区别 二、完全二叉树和满二叉树三、二叉树的遍历&#xff08;一&#xff09;由序列确定二叉树&#xff08;二&#xff09;不同遍历序列的关系 四、二叉树的性质&…

数据结构——堆(存储完全二叉树)

目录 一、堆的概念 二、堆的一些性质 三、堆的结构定义 四、堆的初始化 五、堆打印 六、向上调整算法 七、堆的插入 八、向下调整算法 九、堆的删除 十、取堆顶元素 十一、求堆大小 十二、堆判空 十三、测试代码 一、堆的概念 堆是一种顺序存储完全二叉树的数据结…

智能井盖传感器产品介绍,井盖传感器推荐

智能井盖传感器是一种先进的设备&#xff0c;能够提高城市管理的智能化水平。该传感器作为城市生命线建设的核心组成部分&#xff0c;为智慧城市的正常建设提供了有力的保障&#xff0c;能够提高城市管理的智能化水平。这种设备通过高度灵敏的传感器网络&#xff0c;实时监测井…

智能优化算法应用:基于野马算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于野马算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于野马算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.野马算法4.实验参数设定5.算法结果6.参考文献7.MATLAB…

通过Powershell远程控制windows服务器

1、被测服务器5985、5986端口开启&#xff0c;在网络设置中&#xff0c;点击“更改连接属性”。 2、网络配置文件中选择“专用”。 3、以管理员权限运行Powershell&#xff0c; 4.通过powershell命令在本地电脑上添加远端信任主机 winrm set winrm/config/client {TrustedHos…

字符串和哈希表的基本用法总结

2287. 重排字符形成目标字符串 解决代码 class Solution {public int rearrangeCharacters(String s, String target) {Map<Character, Integer> sCounts new HashMap<Character, Integer>();Map<Character, Integer> targetCounts new HashMap<Chara…

Vue.js深度解析:前端开发的生产力引擎

在数字时代&#xff0c;Web应用的用户界面(UI)不仅是功能的展示窗口&#xff0c;更是品牌形象的前哨站。为此&#xff0c;前端开发者不断寻求最佳解决方案&#xff0c;期望以最快的速度打造最吸引人的用户体验。Vue.js作为一个渐进式JavaScript框架&#xff0c;在不断演进的前端…

关于DWC OTG2.0中PFC的理解

在DWC OTG2.0 Controller手册中&#xff0c;有一章节专门介绍了PFC&#xff0c;Packet FIFO Controller。其内部分为共享FIFO&#xff08;shared FIFO&#xff09;以及专用FIFO&#xff08;Dedicated FIFO&#xff09;&#xff0c;并针对dev和host两种模式&#xff0c;并且还要…

数据库基础语法

●SQL SELECT 用法 ●SQL SELECT DISTINCT 用法 ●SQL WHERE用法 ●SQL AND & OR用法 ●SQL ORDER BY用法 ●SQL INSERT INTO用法 ●SQL UPDATE用法 ●SQL DELETE用法 前言 数据库快速入门&#xff0c;熟悉基础语法 一、SQL 是什么&#xff1f; 存储数据库 二、…

国内AI翘楚,看看有没有你心动的offer?

科技创新争占高地&#xff0c;AI领域各显神通。从一战成名的阿尔法狗到引起轩然大波的ChatGPT&#xff0c;我们早已卷入了一场没有硝烟的革命。前方世人看到的科技日新日异、岁月静好&#xff0c;后方是各大企业的绞尽脑汁、争先恐后。人工智能时代&#xff0c;AI是挡不住的时代…