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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

一个插排引发的设计思想 (一) 观察者模式

發(fā)布時間:2025/3/20 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一个插排引发的设计思想 (一) 观察者模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

一個插排引發(fā)的設計思想 (一) 觀察者模式

一個插排引發(fā)的設計思想 (二) 抽象類與接口

一個插排引發(fā)的設計思想 (三) 委托與事件

...待續(xù)....

?

不知道聊到設計模式,? 經常給人兩種感覺:

1. 原來這個就是A設計模式呀, 我之前也經常這么干, 就是到現在才知道A設計模式指的就是這個.

2. 這個B設計模式, 雖然書上講的晦澀難懂, 但我還是勉強理解了, 可是平時基本上用不著,? 不知道啥時候改用, 甚至有時候感覺這是在"過度設計".

?

今天就以一個插排為例來展開學習一下.

需求: 實現一個插排( 就叫它Output吧 , 英文Socket容易引起歧義 ) 的功能 , 它有N組插孔, 支持多個電器的插頭(對應著叫Input吧)插入并供電.

如下圖

? ? ? ............

需求分析:

1. 插排中有一個集合(即多組插孔), 并提供插頭插入(Add)和拔出(Remove)的方法.?

2. 插入和拔出的插頭(參數)需要滿足一定的規(guī)則, 大家都知道不同國家的插座標準好多不一樣的,比如電壓和針腳的間距等, 這里就按中國標準吧, 咱也弄個GB.

好的, 根據第一感覺開始coding....

?

一. 首先定義一個國標(GB)標準, 只有符合此標準的電器才能插入. abstract的"電器"類GBElectricalAppliance.?

它有個插頭的功能即 Input 方法,Input方法有兩個參數 left 和 right 象征插頭的兩個針腳.

1 public abstract class GBElectricalAppliance 2 { 3 public abstract void Input(int left, int right); 4 }

?

二. 寫個插排(Output)類

1 public class OutPut 2 { 3 public OutPut() 4 { 5 this.EACollection = new List<GBElectricalAppliance>(); 6 } 7 private List<GBElectricalAppliance> EACollection; 8 public void powered(int left,int right) 9 { 10 foreach (var item in EACollection) 11 { 12 item.Input(left,right); 13 } 14 } 15 public void AddInput(GBElectricalAppliance item) 16 { 17 EACollection.Add(item); 18 } 19 20 public void RemoveInput(GBElectricalAppliance item) 21 { 22 EACollection.Remove(item); 23 } 24 }

?

此類有個private 的集合 EACollection, 兩個Public的方法AddInput和RemoveInput 方法參數為GBElectricalAppliance, 即只支持符合標準的插頭插拔.

當插排Output供電(方法powered)時, 遍歷集和EACollection, 調用集和中的電器的Input方法為電器供電.

?

?

三. 分別定義一個電視TV和電水壺ElectricKettle繼承此類并實現插頭的功能即 Input 方法.

1 public class TV : GBElectricalAppliance 2 { 3 public override void Input(int left, int right) 4 { 5 Show(); 6 Sound(); 7 } 8 9 private void Show() 10 { 11 Console.WriteLine("I am showing"); 12 } 13 private void Sound() 14 { 15 Console.WriteLine("I am sounding"); 16 } 17 } 18 19 public class ElectricKettle : GBElectricalAppliance 20 { 21 public override void Input(int left, int right) 22 { 23 Heat(); 24 } 25 26 private void Heat() 27 { 28 Console.WriteLine("I am heating"); 29 } 30 }

?

Main方法測試一下:

輸出:

I am showing

I am sounding

I am heating

?

?四. 小結

到此為止, 功能基本實現了, 我們還可以定義充電寶、電燈等"電器"繼承GBElectricalAppliance插入.

仔細回味一下,? 這其實是用到了觀察者模式,?

觀察者(電器)將插頭注冊到被觀察者(插排)的集和中, 當被插排供電后, 插排會通知所有注冊到集和中的插頭進行供電.

插排不關心插上的具體是什么電器, 只要它是符合國標的電器即可. 通過這樣的設計盡量降低插座與電器之間的耦合度.

?

以上寫法差不多是看到需求后按照第一感覺實現的, 仔細想想我們是不是可以用接口、委托什么的改造一下,

下一篇文章我們繼續(xù)討論.

?

總結

以上是生活随笔為你收集整理的一个插排引发的设计思想 (一) 观察者模式的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 精品人妻伦一二三区免费 | 欧美12--15处交性娇小 | 女裸全身无奶罩内裤内衣内裤 | 亚洲第一视频 | 国产免费av网站 | 国产aaa | 国产乡下妇女做爰毛片 | 色播久久 | 一级片手机在线观看 | 在线观看亚洲色图 | 中文字幕日韩精品在线观看 | 国产免费黄色 | 久久网一区二区 | 性插视频在线观看 | 椎名由奈av一区二区三区 | 无码人妻丰满熟妇啪啪欧美 | 中文字幕亚洲综合 | 成年网站免费在线观看 | 美女网站一区 | 欧美综合自拍亚洲综合图片区 | 涩涩999| 国产一级网站 | 免费观看理伦片在线播放视频软件 | 在线亚洲精品 | 在线观看日韩一区 | 美日毛片| 黄色另类小说 | 欧美小视频在线 | 久久福利影视 | 91涩涩视频| 91视频青青草| 午夜羞羞网站 | 在线免费观看视频网站 | 福利网站在线观看 | 日韩视频在线观看一区二区 | 久久青青热| 欧美91精品久久久久国产性生爱 | www.youjizz.com亚洲| 网站毛片| 91看毛片 | 最好看的mv中文字幕国语电影 | 欧美日韩国产在线 | 18被视频免费观看视频 | 日韩国产欧美精品 | 久久免费成人 | 国产又粗又猛视频免费 | 男男h黄动漫啪啪无遮挡软件 | 五月天伊人网 | 久久免费网| 91视频播放 | 99蜜桃臀久久久欧美精品网站 | 娇妻被老王脔到高潮失禁视频 | 亚洲综合中文 | 国产精品高潮呻吟久久久久久 | 久久露脸国语精品国产 | 农村搞破鞋视频大全 | eeuss日韩| 久久久久久成人精品 | 国产成人精品av在线观 | 日韩射吧 | 日韩av一二三区 | 精品在线二区 | 久久久99精品国产一区二区三区 | 超碰在线图片 | 一区二区三区小视频 | 李宗瑞91在线正在播放 | 极品少妇xxxx精品少妇偷拍 | 青春草免费视频 | 中文字幕亚洲一区二区三区五十路 | 日本黄页网址 | 婷婷中文字幕 | 日日夜夜撸撸 | 狗爬女子的视频 | 伊人精品久久 | 成人综合av | 亚洲少妇网站 | 三级网站免费观看 | av观看网 | 国产九色91| 超碰午夜| 欧美性生活 | 精品国产乱码久久久久久郑州公司 | 香港三级在线视频 | 亚洲第一色区 | 国产成人欧美一区二区三区的 | 国产成人免费av一区二区午夜 | 91精品视频一区 | 91丨porny丨刺激 | 国产精品视频1区 | 精品久久二区 | 国产一卡二卡在线播放 | 久久91精品国产 | jzzijzzij日本成熟少妇 | 91老女人| 青青草原国产在线观看 | 天天天天 | 日韩有码视频在线 | 成人激情四射 | 欧美激情18p |