关于设计模式:设计模式抽象工厂模式

工程目录

DaoFactory.go

package AbstractFactory

//记录接口
type OrderMainDao interface {
    SaveOrderMain()
    //SearchOrderMain()
}

//详情接口
type OrderDetailDao interface {
    SaveOrderDetail()
}

//形象工厂接口
type DaoFactory interface {
    CreateOrderMainDao() OrderMainDao
    CreateOrderDetailDao() OrderDetailDao
}

MYSQLDetailDaoFactory.go

package AbstractFactory

import "fmt"

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{}
}

OracleFactory.go

package AbstractFactory

//形象工厂
type OracleFactory struct {

}

func (*OracleFactory) CreateOrderMainDao() OrderMainDao {
   return &OracleMainDao{}
}

func (*OracleFactory) CreateOrderDetailDao() OrderDetailDao {
   return &OracleDetailDao{}
}

OracleDetailDaoFactory.go

package AbstractFactory

import "fmt"

type OracleMainDao struct {

}

func (*OracleMainDao) SaveOrderMain() {
   fmt.Println("Oracle main save")
}

type OracleDetailDao struct {

}

func (*OracleDetailDao) SaveOrderDetail() {
   fmt.Println("Oracle detail save")
}

abstractFactory_test.go

package AbstractFactory

import "testing"

func TestMySqlFactory_CreateOrderMainDao(t *testing.T) {
   var factory DaoFactory
   factory = &MYSQLFactory{}
   factory.CreateOrderMainDao().SaveOrderMain()
   factory.CreateOrderDetailDao().SaveOrderDetail()

   factory = &OracleFactory{}
   factory.CreateOrderDetailDao().SaveOrderDetail()
   factory.CreateOrderMainDao().SaveOrderMain()
}

评论

发表回复

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

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理