go设计模式 - 简单工厂模式

简单的工厂模式,又称为静态工厂方法,它属于类创建型模式。在简单工厂模式中,可以根据参数创建不同的实例。简单工厂模式专门定义一个类来创建其他类的实例。

优点

工厂类是整个模式的关键.包含了必要的逻辑判断,根据外界给定的信息,决定究竟应该创建哪个具体类的对象.通过使用工厂类,外界可以从直接创建具体产品对象的尴尬局面摆脱出来,仅仅需要负责“消费”对象就可以了。而不必管这些对象究竟如何创建及如何组织的.明确了各自的职责和权利,有利于整个软件体系结构的优化。

缺点

由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中;它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。

当系统中的具体产品类不断增多时候,可能会出现要求工厂类根据不同条件创建不同实例的需求.这种对条件的判断和对具体产品类型的判断交错在一起,很难避免模块功能的蔓延,对系统的维护和扩展非常不利;

这些缺点在工厂方法模式中得到了一定的克服。

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
type Operate interface {
    Exe(int, int) int
}
 
type OperateAdd struct {}
type OperateSub struct {}
type OperateMul struct {}
type OperateDiv struct {}
 
func (operate *OperateAdd) Exe(a, b int) int {
    return a + b
}
 
func (operate *OperateSub) Exe(a, b int) int {
    return a - b
}
 
func (operate *OperateMul) Exe(a, b int) int {
    return a * b
}
 
func (operate *OperateDiv) Exe(a, b int) int {
    return a / b
}
 
func OperateFactory(exe string) Operate {
    if exe == "+" {
        return &OperateAdd{}
    } else if exe == "-" {
        return &OperateSub{}
    } else if exe == "*" {
        return &OperateMul{}
    } else if exe == "/" {
        return &OperateDiv{}
    }
    return nil
}
 
func main() {
    OperateFactory("+").Exe(1, 2)
    OperateFactory("-").Exe(1, 2)
    OperateFactory("*").Exe(1, 2)
    OperateFactory("/").Exe(1, 2)
}

  

posted @   卷毛狒狒  阅读(192)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
点击右上角即可分享
微信分享提示