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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

C语言,去你的策略模式!

發布時間:2023/12/2 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言,去你的策略模式! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

這里先插一點題外話,在C語言中,實現封裝、繼承、隱藏、多態等等特性,是完全沒有問題的。但是在使用過程中,必定是不如自帶這些特性的語言方便好用的,比如C \java等。

一旦要通過C語言來實現各種設計模式,必定會在嚴謹地維護類層次上造成非常繁瑣和臃腫的代碼。這是因為C /java等自帶一套面向對象的工具,而C語言要在代碼設計中,不斷地根據實際情況來創造面向對象的工具。

因此對于文章的內容,請大家主要關注、體會設計模式本身,更多地去考慮程序的可擴展性和可維護性。

文章本身是希望向C語言愛好者普及設計模式的知識,在所有的程序設計中,本意都是盡可能地簡單易懂。因此拋開設計模式的本意去討論程序的代碼實現優劣,是沒有任何意義的。

希望大家可以針對設計模式方面給文章提出一些改進的建議,本人可以保證,對于無惡意、有針對性的建議,一定會吸收接納、及時改正。

接下來是文章的正文部分。

模式動機

完成一項任務,往往可以有多種不同的方式,每一種方式稱為一個策略,我們可以根據環境或者條件的不同選擇不同的策略來完成該項任務。

在軟件開發中也常常遇到類似的情況,實現某一個功能有多個途徑,此時可以使用一種設計模式來使得系統可以靈活地選擇解決途徑,也能夠方便地增加新的解決途徑。

簡單來說,策略模式就是用統一的方法接口分別對不同類型的數據進行訪問。

場景案例

場景:現在我們想用pc看一部電影,但是影片本身有多種播放格式。比如rmvb要rmvb格式的方法,avi要avi的方法,mpeg要mpeg的方法。

傳統代碼實現

... void main() { ... if (movie == avi) {..._/avi影片的播放策略 } else if (movie == rmvb) {..._/rmvb影片的播放策略 } else if ... }

在上面的代碼實現中,把所有的功能代碼全部集中在一個函數里面完成了,隨著分支的擴展,整個函數會越來越臃腫,非常難以維護。我們應該把每個分枝的實現抽離出來,封裝在函數里面實現。

改進代碼實現1:

... void main() { if (movie == avi) {play_avi_movie();//avi影片的播放策略 } else if (movie == rmvb) {play_rmvb_movie();//rmvb影片的播放策略 } else if ... }

在上面的代碼實現中,我們通過把分支代碼封裝起來,減少了主函數的復雜性。但是從更高的一層的抽象看,主函數其實不關心各種分支情況。它希望的是,在進行必要的配置工作以后,直接調用某一個函數接口就能完成功能。

因此,我們應該把各個分支函數抽離出來,統一用某個函數接口來表示。只要在程序中進行完配置工作以后,那么主函數接下來就能直接調用該函數接口。

改進代碼實現2:

void (*play_movie)();void set_movie(char movie) {if(movie == avi){play_movie = play_avi_movie;}else if(movie == rmvb){play_movie = play_rmvb_movie;}else if... }void main() { ... set_movie(); ... play_movie(); ... }

這就是c語言中的策略模式,重點在于分離各個分支的實現函數,主程序只需要通過唯一的接口,就能完成相應功能,提高了程序的可維護性和擴展性。

聲明:

本文于網絡整理,版權歸原作者所有,如來源信息有誤或侵犯權益,請聯系我們刪除或授權事宜。

總結

以上是生活随笔為你收集整理的C语言,去你的策略模式!的全部內容,希望文章能夠幫你解決所遇到的問題。

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