[go设计模式]工厂方法模式
简单工厂就是生产整个计算器,而工厂方法只生产计算器的一部分;
原有的简单工厂可以生'+' '-' '*' '/' ;但是如果添加新的部件'%',厂房就
需要扩充、修改很可以会影响原来部件的正常生产,这就违背了开放封闭原则;
而工厂方法则不存在这个问题;我新开一个工厂专门生产'%'就可以了。
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设计模式]工厂方法模式的更多相关文章
- 4. 星际争霸之php设计模式--工厂方法模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- C++设计模式——工厂方法模式
本文版权归果冻说所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利.» 本文链接:http://www.jellythink.com/arch ...
- JAVA设计模式--工厂方法模式
工厂方法设计模式 抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关.是具体工厂角色必须实现的接口或者必须继承的父类.在java中它由抽象类或者接口来实现.具体工厂角色:它含有和具体业务逻辑有关 ...
- 深入浅出设计模式——工厂方法模式(Factory Method)
介绍在简单工厂模式中,我们提到,工厂方法模式是简单工厂模式的一个延伸,它属于Gof23中设计模式的创建型设计模式.它解决的仍然是软件设计中与创建对象有关的问题.它可以更好的处理客户的需求变化. 引入我 ...
- 设计模式--工厂方法模式(Factory method pattern)及应用
面向对象的好处: 通过封装,继承,多态把程序的耦合度降低. 用设计模式可以使程序更加灵活,容易修改,且易于复用. 1. 工厂方法模式 Define an interface for creating ...
- 我的Java设计模式-工厂方法模式
女朋友dodo闹脾气,气势汹汹的说"我要吃雪糕".笔者心里啊乐滋滋的,一支雪糕就能哄回来,不亦乐乎?! 但是,雪糕买回来了,她竟然说"不想吃雪糕了,突然想吃披萨" ...
- 设计模式 — 工厂方法模式(Factory Method)
在开发系统中,经常会碰到一个问题.现在需要实现的一些功能,但是这个功能模块以后一定是需要扩展的,那么现在开发中就不仅要实现现在的功能,还要考虑以后的扩展.那么为了系统的健壮,扩展就要遵循开闭原则(简单 ...
- C#设计模式--工厂方法模式
0.C#设计模式-简单工厂模式 设计模式: 工厂方法模式(Factory Method Pattern) 介绍:简单工厂模式是要在工厂类中通过数据来做个决策,在工厂类中的多个类中实例化出来其中一个要用 ...
- Java设计模式—工厂方法模式&抽象工厂模式
工厂方法模式与抽象工厂模式都是设计模式中重要而且常见的模式. 工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 通用类图如下: 在 ...
- 设计模式——工厂方法模式(Factory Method)
原文地址:http://www.cnblogs.com/Bobby0322/p/4179921.html 介绍 在简单工厂模式中,我们提到,工厂方法模式是简单工厂模式的一个延伸,它属于Gof23中设计 ...
随机推荐
- 类文件结构——深入理解Java虚拟机 笔记三
在之前的笔记中记录过,Java程序变成可执行文件的步骤是:源代码-->经过编译变成class文件-->经过JVM虚拟机变成可执行的二进制文件.因此,为了对JVM执行程序的过程有一个好的了解 ...
- php5.2安装memcached 扩展
需要注意版本号,好坑. libmemcached release 1.0.16 - installed from sourcephp-memcached release 2.1.0 - install ...
- git :error: bad signature fatal: index file corrupt
删除.git/index文件再执行: git reset 不行的话就执行: git read-tree --empty https://stackoverflow.com/questions/213 ...
- 你想了解的python基础数据类型这里都有
目录 python基础数据总结 数字型数据类型 数字型数据基本知识 算术运算符 进制 二进制运算符 字符串数据类型 字符串基础知识 字符串数据操作方法(增 查 改) 集合数据类型 集合基础知识 集合元 ...
- chosen.jquery.js
http://baifjece.blog.163.com/blog/static/33794654201286102519119/ ------------------首次加载设置默认选中项----- ...
- MY FIRST PAGE!
RT. This is my first time to create and customize my cnblogs. Nice to see you!
- 英语四六级模拟考试系统APP
Android studio开发的.eclipse的SSM框架作为服务器后台.Mysql5.6. 我先上几张图吧. 需要源码可以留言给我.另外本人接外包或者有问题也可以问我.留言,我会看的.
- poj1486二分匹配 待填坑
Sorting Slides Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 4777 Accepted: 1867 De ...
- BZOJ 1070 拆点 费用流
1070: [SCOI2007]修车 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 5860 Solved: 2487[Submit][Status] ...
- Java中异常分类和Throw和Throws的区别
Java中异常分类和Throw和Throws的区别 1.异常分类 Throwable是Java中所有错误和异常的超类.它的下一级是Error和Exception 1.1 Error(错误) Error ...