简单工厂就是生产整个计算器,而工厂方法只生产计算器的一部分;

原有的简单工厂可以生'+' '-' '*' '/' ;但是如果添加新的部件'%',厂房就

需要扩充、修改很可以会影响原来部件的正常生产,这就违背了开放封闭原则;

而工厂方法则不存在这个问题;我新开一个工厂专门生产'%'就可以了。

package main

import (
"fmt"
) type Operation interface {
Exe(int, int) int
} type FactoryAdd struct{}
type OperationAdd struct{} func (this *FactoryAdd) Create() Operation {
return &OperationAdd{}
} func (this *OperationAdd) Exe(a int, b int) int {
return a + b
} type FactorySub struct{}
type OperationSub struct{} func (this *FactorySub) Create() Operation {
return &OperationSub{}
} func (this *OperationSub) Exe(a int, b int) int {
return a - b
} type FactoryMul struct{}
type OperationMul struct{} func (this *FactoryMul) Create() Operation {
return &OperationMul{}
} func (this *OperationMul) Exe(a int, b int) int {
return a * b
} type FactoryDiv struct{}
type OperationDiv struct{} func (this *FactoryDiv) Create() Operation {
return &OperationDiv{}
} func (this *OperationDiv) Exe(a int, b int) int {
return a / b
} // 新增一个"%"操作,不影响原来的代码,符合开放封闭原则
type FactoryMod struct{}
type OperationMod struct{} func (this *FactoryMod) Create() Operation {
return &OperationMod{}
} func (this *OperationMod) Exe(a int, b int) int {
return a % b
} func main() { fmt.Println(
(&FactoryAdd{}).Create().Exe(10, 5),
(&FactorySub{}).Create().Exe(10, 5),
(&FactoryMul{}).Create().Exe(10, 5),
(&FactoryDiv{}).Create().Exe(10, 5),
(&FactoryMod{}).Create().Exe(10, 5))
}

  

输出结果:

15 5 50 2 0

[go设计模式]工厂方法模式的更多相关文章

  1. 4. 星际争霸之php设计模式--工厂方法模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  2. C++设计模式——工厂方法模式

    本文版权归果冻说所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利.» 本文链接:http://www.jellythink.com/arch ...

  3. JAVA设计模式--工厂方法模式

    工厂方法设计模式 抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关.是具体工厂角色必须实现的接口或者必须继承的父类.在java中它由抽象类或者接口来实现.具体工厂角色:它含有和具体业务逻辑有关 ...

  4. 深入浅出设计模式——工厂方法模式(Factory Method)

    介绍在简单工厂模式中,我们提到,工厂方法模式是简单工厂模式的一个延伸,它属于Gof23中设计模式的创建型设计模式.它解决的仍然是软件设计中与创建对象有关的问题.它可以更好的处理客户的需求变化. 引入我 ...

  5. 设计模式--工厂方法模式(Factory method pattern)及应用

    面向对象的好处: 通过封装,继承,多态把程序的耦合度降低. 用设计模式可以使程序更加灵活,容易修改,且易于复用. 1. 工厂方法模式 Define an interface for creating ...

  6. 我的Java设计模式-工厂方法模式

    女朋友dodo闹脾气,气势汹汹的说"我要吃雪糕".笔者心里啊乐滋滋的,一支雪糕就能哄回来,不亦乐乎?! 但是,雪糕买回来了,她竟然说"不想吃雪糕了,突然想吃披萨" ...

  7. 设计模式 — 工厂方法模式(Factory Method)

    在开发系统中,经常会碰到一个问题.现在需要实现的一些功能,但是这个功能模块以后一定是需要扩展的,那么现在开发中就不仅要实现现在的功能,还要考虑以后的扩展.那么为了系统的健壮,扩展就要遵循开闭原则(简单 ...

  8. C#设计模式--工厂方法模式

    0.C#设计模式-简单工厂模式 设计模式: 工厂方法模式(Factory Method Pattern) 介绍:简单工厂模式是要在工厂类中通过数据来做个决策,在工厂类中的多个类中实例化出来其中一个要用 ...

  9. Java设计模式—工厂方法模式&抽象工厂模式

    工厂方法模式与抽象工厂模式都是设计模式中重要而且常见的模式.       工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 通用类图如下: 在 ...

  10. 设计模式——工厂方法模式(Factory Method)

    原文地址:http://www.cnblogs.com/Bobby0322/p/4179921.html 介绍 在简单工厂模式中,我们提到,工厂方法模式是简单工厂模式的一个延伸,它属于Gof23中设计 ...

随机推荐

  1. mybatis多对一与一对多

    步骤: 1.创建maven项目 2.编写工具类 3.编写实体类 4.编写mapper接口 5.配置xml 6.测试 多对一:多个学生关联一个老师 工具类: //sqlSessionFactory -- ...

  2. linux常用命令---PATH与防火墙

    linux的路径PATH 防火墙

  3. 使用包时,报 xxx.default is not a function

     最近做了一个导出功能,代码如下 import request from 'request-promise-native'; export default class Form { // 导出 @po ...

  4. Gym101612H Hidden Supervisors

    题目链接:https://vjudge.net/problem/Gym-101612H 知识点: 贪心 解题思路: 我们称除了以 \(1\) 号结点为根的树以外的树为 “其他树”. 对于每一棵树,先自 ...

  5. 用jquery写一个上拉加载

    /*可加载页面吗*/function canLoadMore() { return $('.loadin').length < 1;}/*移除正在加载字样*/function removeMor ...

  6. Java——多线程基础知识

    多线程进程和线程的区别:每一个进程拥有自己的一整套变量,而线程则共享数据.java.lang.Thread    static void sleep(long millis) 线程休眠给定的毫秒数,用 ...

  7. json字符串转List集合

    public List<Map<String,PendingInfo>> jsonToList(String json){//PendingInfo可以换成其它bean类 Li ...

  8. php操作redis常用方法

    1,connect 描述:实例连接到一个Redis. 参数:host: string,port: int 返回值:BOOL 成功返回:TRUE;失败返回:FALSE 示例: <?php $red ...

  9. UIAutomator2的API文档(二)

    1.设备屏幕事件 熄灭屏幕d.screen_off() 唤醒屏幕d.screen_on() 屏蔽状态d.info.get('screenOn')#返回True or False 解锁屏幕d.unloc ...

  10. 前端基础进阶(十四):es6常用基础合集

    在实际开发中,ES6已经非常普及了.掌握ES6的知识变成了一种必须.尽管我们在使用时仍然需要经过babel编译. ES6彻底改变了前端的编码风格,可以说对于前端的影响非常巨大.值得高兴的是,如果你熟悉 ...