工程目录

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()}