package main
import "fmt"
// 工厂设计模式:通过“对象创建”模式绕开new,来避免对象创建new过程中所导致紧耦合情况
// (依赖具体类),从而支持创建对象的稳定。它是接口抽象之后的第一步工作
// 外部调用
type Calculate struct {
of OperateFactory
}
func (c *Calculate) Calc (i,j int){
// 抽象方法(全部使用接口调用 稳定)
c.of.CreateOperateFactory().Operate(i,j)
}
// ======================================
// 定义一个运算接口
type Operater interface {
Operate(i,j int)
}
// 加法运算
type AddOperate struct {
}
func (a *AddOperate) Operate(i,j int){
fmt.Println("加法运算")
fmt.Println(i+j)
}
// 减法运算
type SubOperate struct {
}
func (s *SubOperate) Operate(i,j int){
fmt.Println("减法运算")
fmt.Println(i - j)
}
// ... 扩展运算再此添加
// ======================================
// 定义一个工厂接口
type OperateFactory interface {
CreateOperateFactory() Operater
}
// 加法运算工厂
type AddOperateFactory struct {
}
func (a *AddOperateFactory) CreateOperateFactory() Operater{
return &AddOperate{}
}
// 减法运算工厂
type SubOperateFactory struct {
}
func (s *SubOperateFactory) CreateOperateFactory() Operater{
return &SubOperate{}
}
// ... 扩展运算工厂在此添加
// ======================================
func main(){
// 加法
c := Calculate{}
c.of = &AddOperateFactory{}
c.Calc(1,3)
// 减法
c.of = &SubOperateFactory{}
c.Calc(10,5)
Go Factory工厂模式
最新推荐文章于 2023-12-08 11:41:58 发布