設計模式課程設計

2021-10-06 22:15:20 字數 3373 閱讀 3378

具體作業如下:

具體實現過程

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

題目要求:

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

設計模式期終作業 3000

+字**一篇

要求:1、結構完整,理論聯絡實踐,只總結知識點不行

2、要求有一整個專案設計到生成完整過程,用到至少三種學過的設計模式,一定要有**實現。

3、用咱們學院的封皮和格式完成,有題目、有封皮、有目錄、有分層。

掛科模式啟動…(狗頭)

一、設計思路

作為一名準程式設計師,每天使用頻率最高的就是電腦了,恰逢設計模式大作業需要編寫乙個專案,就想通過模擬電腦製造銷售的過程來完成這一作業。整體過程大致如下,使用簡單工廠模式生產電腦,然後工廠直接銷售電腦,在銷售模式的電商模式中,使用觀察者模式模擬使用者檢視物流資訊,使用介面卡模式模擬電腦接通電源的情況。

二、所用模式介紹

1.簡單工廠模式

簡單工廠模式屬於建立型模式,又叫靜態工廠方法模式,但不屬於23種gof模式之一

簡單工廠模式是由乙個工廠物件決定建立出哪一種產品類的例項,它是工廠模式種最簡單實用的模式

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

簡單工廠模式所包含的角色和職責如下:

• 工廠角色:簡單工廠模式的核心,它負責實現建立所有例項的內部邏輯;工廠類的建立產品類的方法可以被外界直接呼叫,建立所需的產品物件

• 抽象產品角色:簡單工廠模式所建立的所有物件的父類,它負責描述所有例項所共有的公共介面

• 具體產品角色:簡單工廠模式的建立目標,所有建立的物件都是充當這個角色的某個具體類的例項

簡單工廠模式的uml類圖

在此專案中,準備以此模式模擬電腦的生產廠商生產不同型別的電腦.

2.裝飾模式

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

模式結構

抽象構件:給出乙個抽象介面,以規範準備接受附加責任的物件 具體構件:實現抽象構件,通過裝飾角色為其新增新的功能

抽象裝飾:繼承抽象構件,幷包含具體構件的例項,可以通過其擴充套件具體構件的功能

裝飾模式的uml類圖

模式使用場景

需要拓展乙個類的功能,或者給乙個類新增附加功能

需要動態的給乙個物件新增功能,這些功能可以動態的撤銷

需要通過對現有的一組基本功能進行動態組合而產生多種復合功能時(繼承實現較為困難)

模式特點

裝飾模式和繼承都能拓展物件的功能,裝飾模式更加靈活

無需建立新的子類即可拓展物件的行為

裝飾模式會導致設計**現許多小類,會使程式變得更加複雜

3.觀察者模式

觀察者模式中多個物件間存在一對多的依賴關係,當乙個物件的狀態發生改變時,所有依賴於它的物件都得到通知並被自動更新

模式的結構

觀察者模式uml類圖

具體實現過程

程式分為三個部分:

電腦的生產

電腦的裝配

電腦的售出

在此過程中,我使用了簡單工廠模式生產電腦,使用裝飾者模式對電腦進行裝配,使用觀察者模式讓買家和廠家關注物流資訊,具體實現細節如下:

#include

#include

using namespace std;

//抽象電腦

class computer

;//膝上型電腦

class laptop : public computer };

//台式主機

class desktop : public computer };

//電腦工廠

class compute***ctory};

//抽象構件:華為電腦

class computer_huawei};

//具體構件:華為magicbook電腦

class huawei_magicbook : public computer_huawei};

//抽象裝飾:外觀顏色

class color : public computer_huawei

virtual void

showstatus()

};//具體裝飾:星空灰

class greycolor : public color

//增加額外裝飾

void

grey()

void

showstatus()

};//具體裝飾:銳龍cpu

class amd_yes : public color

//增加額外裝飾

void

amd(

)void

showstatus()

};//抽象觀察者

class abstractviewer

;//具體觀察者:顧客

class customer : public abstractviewer

void

update()

};//具體觀察者b

class seller : public abstractviewer

void

update()

};//抽象主題

class abstractinf

;//具體主題:logstatus

class logstatus : public abstractinf

void

removeviewer

(abstractviewer* receiver)

void

tellallviewer()

}private:

deque

> viewers;};

intmain()

程式執行結果如下:

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

課程設計表

create database drug 藥品表 create table drug did nvarchar 10 primary key,dname nvarchar 50 not null,dimage nvarchar 100 not null,dmodel nvarchar 10 chec...

課程設計總結

課程設計今天終於完了,答辯之後感悟挺多的,一方面,覺得自己的努力獲到了應有的成果,當然也有很多不足及未完成的地方 另一方面,看到很多其他同學好的設計及思想。覺得很多方面都值得自己學習,自己還有很多方面都很欠缺,本次課程設計我和兩個同學共三個人做了聊天程式,仿qq做的。聊天軟體,是我之前一直想完成的乙...

課程設計備份

include include include include define size 100 define increase 10 struct nodel 順序表 typedef struct tree btree,bnode 二叉樹struct stackt 棧int caidan int i...