工程目录
DaoFactory.go
package AbstractFactory//记录接口type OrderMainDao interface { SaveOrderMain() //SearchOrderMain()}//详情接口type OrderDetailDao interface { SaveOrderDetail()}//形象工厂接口type DaoFactory interface { CreateOrderMainDao() OrderMainDao CreateOrderDetailDao() OrderDetailDao}
MYSQLDetailDaoFactory.go
package AbstractFactoryimport "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 AbstractFactoryimport "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 AbstractFactoryimport "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()}