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

歡迎訪問 生活随笔!

生活随笔

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

asp.net

设计模式课程设计

發布時間:2024/8/1 asp.net 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式课程设计 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

        • 題目要求:
      • 具體作業如下:
        • 一、設計思路
        • 二、所用模式介紹
          • 1.簡單工廠模式
          • 2.裝飾模式
          • 3.觀察者模式
        • 具體實現過程
          • 程序分為三個部分:
        • PS.代碼寫的比較敷衍,主要是應付作業用,請大家自行斟酌抄襲

又到了一年兩度的課程設計時間,又要開始寫無聊的課程設計,學校是開了課程設計這門課的,但是疫情期間老師選的網課視頻的講解風格不是很好,所以我就自己在bilibili上看視頻學習的,具體學習筆記可以看我的《設計模式》專欄

題目要求:

南陽理工學院----計算機與軟件學院

設計模式期終作業 3000+字論文一篇 要求: 1、結構完整,理論聯系實踐,只總結知識點不行 2、要求有一整個項目設計到生成完整過程,用到至少三種學過的設計模式,一定要有代碼實現。 3、用咱們學院的封皮和格式完成,有題目、有封皮、有目錄、有分層。

掛科模式啟動…(狗頭)

具體作業如下:

一、設計思路

作為一名準程序員,每天使用頻率最高的就是電腦了,恰逢設計模式大作業需要編寫一個項目,就想通過模擬電腦制造銷售的過程來完成這一作業。整體過程大致如下,使用簡單工廠模式生產電腦,然后工廠直接銷售電腦,在銷售模式的電商模式中,使用觀察者模式模擬用戶查看物流信息,使用適配器模式模擬電腦接通電源的情況。

二、所用模式介紹

1.簡單工廠模式

簡單工廠模式屬于創建型模式,又叫靜態工廠方法模式,但不屬于23種GOF模式之一
簡單工廠模式是由一個工廠對象決定創建出哪一種產品類的實例,它是工廠模式種最簡單實用的模式

簡單工廠模式的實質是由一個工廠類根據傳入的參數,動態決定應該創建哪種產品類的實例

簡單工廠模式所包含的角色和職責如下:
? 工廠角色:簡單工廠模式的核心,它負責實現創建所有實例的內部邏輯;工廠類的創建產品類的方法可以被外界直接調用,創建所需的產品對象
? 抽象產品角色:簡單工廠模式所創建的所有對象的父類,它負責描述所有實例所共有的公共接口
? 具體產品角色:簡單工廠模式的創建目標,所有創建的對象都是充當這個角色的某個具體類的實例

簡單工廠模式的UML類圖

在此項目中,準備以此模式模擬電腦的生產廠商生產不同類型的電腦.

2.裝飾模式

裝飾模式:在不改變現有對象結構的情況下,動態的給對象增加一些額外功能

模式結構

  • 抽象構件:給出一個抽象接口,以規范準備接受附加責任的對象 具體構件:實現抽象構件,通過裝飾角色為其添加新的功能
  • 抽象裝飾:繼承抽象構件,并包含具體構件的實例,可以通過其擴展具體構件的功能
  • 具體裝飾:實現抽象裝飾的相關方法,并給具體構件對象添加附加的責任
  • 裝飾模式的UML類圖

    模式使用場景

  • 需要拓展一個類的功能,或者給一個類添加附加功能
  • 需要動態的給一個對象添加功能,這些功能可以動態的撤銷
  • 需要通過對現有的一組基本功能進行動態組合而產生多種復合功能時(繼承實現較為困難)
  • 模式特點

    • 優點
  • 裝飾模式和繼承都能拓展對象的功能,裝飾模式更加靈活
  • 無需創建新的子類即可拓展對象的行為
    • 缺點
  • 裝飾模式會導致設計中出現許多小類,會使程序變得更加復雜
  • 3.觀察者模式

    觀察者模式中多個對象間存在一對多的依賴關系,當一個對象的狀態發生改變時,所有依賴于它的對象都得到通知并被自動更新

    模式的結構

    • 抽象主題:提供了一個用于保存觀察者對象的聚集類和增加、刪除觀察者對象的方法,以及通知所有觀察者的抽象方法
    • 具體主題:實現抽象目標中的通知方法,當具體主題的內部狀態發生變化時,通知所有注冊過的觀察者對象
    • 抽象觀察者:抽象類或接口,它包含了一個更新自己的抽象方法,當接到具體主題的更改通知時被調用
    • 具體觀察者:實現抽象觀察者中定義的抽象方法,以便在得到目標的更改通知時更新自身的狀態

    觀察者模式UML類圖

    具體實現過程

    程序分為三個部分:
  • 電腦的生產
  • 電腦的裝配
  • 電腦的售出
  • 在此過程中,我使用了簡單工廠模式生產電腦,使用裝飾者模式對電腦進行裝配,使用觀察者模式讓買家和廠家關注物流信息,具體實現細節如下:

    #include <iostream> #include <deque> using namespace std;//抽象電腦 class Computer { public:virtual void showName() = 0; };//筆記本電腦 class LapTop : public Computer { public:virtual void showName(){cout << "筆記本電腦創建成功!" << endl;} };//臺式主機 class DeskTop : public Computer { public:virtual void showName(){cout << "臺式電腦創建成功!" << endl;} };//電腦工廠 class ComputerFactory { public:static Computer* Create(int type){if (type == 1)return new LapTop;else if (type == 2)return new DeskTop;elsereturn NULL;} };//抽象構件:華為電腦 class computer_Huawei { public:virtual void showStatus() {} };//具體構件:華為MagicBook電腦 class Huawei_MagicBook : public computer_Huawei { public:virtual void showStatus(){cout << "我是華為MagicBook,我是一臺優秀的筆記本!!!" << endl;} };//抽象裝飾:外觀顏色 class Color : public computer_Huawei { public:computer_Huawei* magicbook;Color(computer_Huawei* Huawei_MagicBook) {this->magicbook = Huawei_MagicBook;}virtual void showStatus() {}};//具體裝飾:星空灰 class greyColor : public Color { public:greyColor(computer_Huawei* magicbook) : Color(magicbook) {}//增加額外裝飾void Grey(){//灰色機身cout << "我是一臺灰色的MagicBook!!!" << endl;}void showStatus(){cout << "我是華為MagicBook,我是一臺優秀的筆記本!!!" << endl;Grey();} };//具體裝飾:銳龍CPU class AMD_YES : public Color { public:AMD_YES(computer_Huawei* magicbook) : Color(magicbook) {}//增加額外裝飾void amd(){//銳龍CPUcout << "我是一臺配備銳龍CPU的MagicBook!!!" << endl;}void showStatus(){cout << "我是華為MagicBook,我是一臺優秀的筆記本!!!" << endl;amd();} };//抽象觀察者 class AbstractViewer { public:virtual void Update() = 0; };//具體觀察者:顧客 class customer : public AbstractViewer { public:customer(){cout << "我是顧客,我正在焦急的等待物流消息更新!" << endl;}void Update(){cout << "快遞到了,我飛奔去取我的快遞!!!" << endl;} };//具體觀察者B class seller : public AbstractViewer { public:seller(){cout << "我是賣家,我需要確認物流信息沒有出現問題!" << endl;}void Update(){cout << "買家收到貨了,我要打電話讓他給我好評!!!" << endl;} };//抽象主題 class AbstractInf { public:virtual void addViewer(AbstractViewer* receiver) = 0;virtual void removeViewer(AbstractViewer* receiver) = 0;virtual void tellAllViewer() = 0; };//具體主題:logStatus class logStatus : public AbstractInf { public:void addViewer(AbstractViewer* receiver){Viewers.push_back(receiver);}void removeViewer(AbstractViewer* receiver){auto it = find(Viewers.begin(), Viewers.end(), receiver);if (it != Viewers.end())Viewers.erase(it);}void tellAllViewer(){deque<AbstractViewer*>::iterator i = Viewers.begin();while (i != Viewers.end()){(*i++)->Update();}}private:deque<AbstractViewer*> Viewers; };int main() {ComputerFactory* factory = new ComputerFactory;int computer_type = 0;cout << "請輸入你想要創建的電腦類型:(筆記本電腦為1/臺式機為2)" << endl;cin >> computer_type;Computer* computer = factory->Create(computer_type);cout << "電腦生產完畢!!!" << endl;cout << "===============即將為電腦添加灰色外殼==============" << endl;computer_Huawei* huawei = new Huawei_MagicBook;huawei->showStatus();huawei = new greyColor(huawei);huawei->showStatus();cout << "===============即將為電腦配備銳龍CPU===============" << endl;huawei = new AMD_YES(huawei);huawei->showStatus();cout << "==============電腦售出,通知買家和賣家物流信息============" << endl;AbstractInf* plogStatus = new logStatus;plogStatus->addViewer(new seller);plogStatus->addViewer(new customer);plogStatus->tellAllViewer();system("pause");return 0; }

    程序運行結果如下:

    PS.代碼寫的比較敷衍,主要是應付作業用,請大家自行斟酌抄襲

    總結

    以上是生活随笔為你收集整理的设计模式课程设计的全部內容,希望文章能夠幫你解決所遇到的問題。

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