日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

设计模式--抽象工厂(Abstract Factory)模式

發布時間:2025/3/21 asp.net 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式--抽象工厂(Abstract Factory)模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

模式定義

提供一個創建一系列相關或互相依賴對象的接口,而無需指定它們具體的類

類圖

應用場景

程序需要處理不同系列的相關產品,但是你不希望它依賴于這些產品的具體類時可以使用抽象工廠模式

優點

1.可以確信你從工廠得到的產品彼此是兼容的;

2.可以避免具體產品和客戶端代碼之間的緊密耦合;

3.符合單一職責原則;

4.符合開閉原則

要點總結

  • 如果沒有應對“多系列對象構建”的需求變化,則沒有必要使用Abstract Factory模式,這時候使用簡單的工廠完全可以
  • “系列對象”指的是在某一特定系列下的對象之間有相互依賴或作用的關系,不同系列的對象之間不能相互依賴
  • Abstract Factory模式主要在于應對“新系列”的需求變動,其缺點在于難以應對“新對象”的需求變動

Go語言代碼實現

工程目錄

DaoFactory.go

package AbstractFactory//記錄接口 type OrderMainDao interface {SaveOrderMain()//SearchOrderMain() }//詳情接口 type OrderDetailDao interface {SaveOrderDetail() }//抽象工廠接口 type DaoFactory interface { //一系列相關接口CreateOrderMainDao() OrderMainDaoCreateOrderDetailDao() 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 DaoFactoryfactory = &MYSQLFactory{}factory.CreateOrderMainDao().SaveOrderMain()factory.CreateOrderDetailDao().SaveOrderDetail()factory = &OracleFactory{}factory.CreateOrderDetailDao().SaveOrderDetail()factory.CreateOrderMainDao().SaveOrderMain() }

總結

以上是生活随笔為你收集整理的设计模式--抽象工厂(Abstract Factory)模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。