網站首頁 編程語言 正文
1、簡單工廠:
第一步:創建一個文章接口,需要實現閱讀和寫作的功能。
type Article interface { ReadArticle() string WriteArticle(contents string) string }
第二步:創建?中文書?和?英文書?兩個“類”,并且分別實現兩種方法。(注:golang種沒有類,只有組合。應賀總強調,特別說明)
type ChineseArticle struct{} type EnglishArticle struct{} func (c *ChineseArticle) ReadArticle() string { return "這是中文字符" } func (c *EnglishArticle) ReadArticle() string { return "this's English chars" } func (c *ChineseArticle) WriteArticle(contents string) string { return "寫入了文章" } func (c *EnglishArticle) WriteArticle(contents string) string { return "wirted words" }
第三步:使用斷言方式分配不同的參數,應該需要使用什么樣的方法去實例化具體的類
func SFactory(lan string) (art Article) { switch lan { case "Chinese": art = &ChineseArticle{} case "English": art = &EnglishArticle{} default: art = &ChineseArticle{} } return art }
第四步:使用
func main() { a := SFactory("Chinese")//這樣,我實例化中文書還是英文書都可以了 fmt.Println(a.ReadArticle()) }
總體結構如下圖:
2、方法工廠:
第一步:同上, 來一個文章接口
type Article interface { ReadArticle() string WriteArticle(contents string) string }
第二步:來兩種書。需要實例化的類
。并且實現接口
type ChineseArticle struct{} type EnglishArticle struct{} //實現讀寫接口 func (c *ChineseArticle) ReadArticle() string { return "讀書了" } func (c *EnglishArticle) ReadArticle() string { return "reading books" } func (c *ChineseArticle) WriteArticle(contents string) string { return "寫書了" } func (c *EnglishArticle) WriteArticle(contents string) string { return "wirting books" }
第三步:創建兩個用來創建“類”的“類”,以及其方法
type CreateEnglish struct{} type CreateChinese struct{} //方法工廠的核心。 func (cdb *CreateEnglish) CreateArticle() (len *EnglishArticle, err error) { len = &EnglishArticle{} return len, nil } func (cdb *CreateChinese) CreateArticle() (len *ChineseArticle, err error) { len = &ChineseArticle{} return len, nil }
第四步:使用
func main() { a := &CreateChinese{} art, _ := a.CreateArticle() fmt.Println(art.WriteArticle("123")) }
總體結構如下:
抽象工廠
第一步:創建一個book
,然后再創建一個能夠創建book的BookCompany
接口。
type BookCompany interface { Create() Book } type Book interface { ReadBook() string WriteBook() string }
第二步:創建兩book
?并且實現它
type EnglishBook struct{} type ChineseBook struct{} //實現book的功能 func (c *EnglishBook) ReadBook() string { return "reading a english book" } func (c *ChineseBook) ReadBook() string { return "讀中文書" } func (c *EnglishBook) WriteBook() string { return "i'am writing" } func (c *ChineseBook) WriteBook() string { return "我在創作中" }
第三步:創建兩個印刷廠
type BeiJinCompany struct{} type ShanghaiCompany struct{} //一個印刷場刷英語書,一個刷中文書 func (c *BeiJinCompany) Create() Book { return &EnglishBook{} } func (c *ShanghaiCompany) Create() Book { return &ChineseBook{} }
第四步:用起來
func main() { var f BookCompany f = new(BeiJinCompany) book := f.Create() fmt.Println(book.ReadBook()) }
整體效果如下:
原文鏈接:https://www.cnblogs.com/limanman233/p/16117751.html
相關推薦
- 2022-11-23 Python?property裝飾器使用案例介紹_python
- 2022-05-12 Python繪制計算機CPU占有率變化的折線圖_python
- 2022-06-18 C語言?詳解字符串基礎_C 語言
- 2022-02-26 C#正則表達式Regex類的用法_C#教程
- 2023-01-27 解決Pycharm模塊安裝慢問題的兩種方法_python
- 2022-09-17 docker資源控制管理Cgroup的實現_docker
- 2022-07-11 Oracle使用dblink同步數據
- 2022-06-27 ASP.net?Core微信平臺開發配置Token_實用技巧
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支