Golang设计模式之抽象工厂

Jackey Golang 1,813 次浏览 , , 没有评论

创建DAOFactory.go

package AbstractFactory

// mysql
// sqlserver
// oracle
// 订单
// 订单报表

type OrderMainDAO interface { // 订单记录
    SaveOrderMain() // 保存
    //DeleteOrderMain()
    //SearchOrderMain()
}

type OrderDetailDAO interface { // 订单详情
    SaveOrderDetail() // 保存
}

type DAOFactory interface { // 抽象工厂接口
    CreateOrderMainDAO() OrderMainDAO
    CreateOrderDetailDAO() OrderDetailDAO
}

创建MySQLDAOFactory.go

package AbstractFactory

import "fmt"

// mysql针对两个接口的实现
type MySQLMainDAO struct {
}

func (*MySQLMainDAO) SaveOrderMain() {
    fmt.Println("Mysql main save")
}

type MySQLDetailDAO struct {
}

func (*MySQLDetailDAO) SaveOrderDetail() {
    fmt.Println("mysql detail save")
}

创建MySQLFactory.go

package AbstractFactory

// 抽象工厂
type MySQLFactory struct {
}

func (*MySQLFactory) CreateOrderMainDAO() OrderMainDAO {
    return &MySQLMainDAO{}
}

func (*MySQLFactory) CreateOrderDetailDAO() OrderDetailDAO {
    return &MySQLDetailDAO{}
}

创建OracleDAOFactory.go

package AbstractFactory

import "fmt"

// mysql针对两个接口的实现
type OracleMainDAO struct {
}

func (*OracleMainDAO) SaveOrderMain() {
    fmt.Println("oracle main save")
}

type OracleDetailDAO struct {
}

func (*OracleDetailDAO) SaveOrderDetail() {
    fmt.Println("oracle detail save")
}

创建OracleFactory.go

package AbstractFactory

// 抽象工厂
type OracleFactory struct {
}

func (*OracleFactory) CreateOrderMainDAO() OrderMainDAO {
    return &OracleMainDAO{}
}

func (*OracleFactory) CreateOrderDetailDAO() OrderDetailDAO {
    return &OracleDetailDAO{}
}

main.go

package main

import "test/design/AbstractFactory"

func main() {
    var factory AbstractFactory.DAOFactory
    //factory = &AbstractFactory.MySQLFactory{}
    factory = &AbstractFactory.OracleFactory{}
    factory.CreateOrderMainDAO().SaveOrderMain()
    factory.CreateOrderDetailDAO().SaveOrderDetail()
}

 

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Go