《软件工程》实验报告——软件设计
一、實驗目的
將實驗過程中形成的圖形、文字內容插入本文檔。
?
二、實驗內容
1、當前Web前端最經典的軟件體系結構模式是MVC模式(Model-View-Controller),其中的三個組成部分為:
在一個復雜的Web站點中,處理一個請求時,需要做很多類似的工作,包括安全認證、國際化、為特定用戶提供特殊視圖等。如果輸入控制器行為分散為多個對象中,這種行為相當一部分會在各處被復制,同時,在運行時改變行為也比較難。前端控制器通過引導請求經過一個處理程序對象來統一所有的請求處理,可以執行一些通用的行為,并且在程序運行時采用decorators來修改這些行為。然后,處理程序就調度一些command對象來處理某一請求的特定行為。前端控制器模式類圖如下:
根據上述描述,先畫出前端控制器+MVC模式的順序圖,再根據所學的軟件分析方法導出MVC模式對應的類圖。
2、利用Axure RP軟件模仿類似下方的一個Web頁面:
?
操作過程:
1)準備各項元件。從元件庫中將所需元件拖放到頁面上。如需圖片,可從百度下載或搜索得到。按照示例頁面,設備各項元件的對齊關系和樣式。注意:復選框和右邊的鏈接文字是兩個不同元件,只是靠得近。保存,點擊菜單“發布>預覽”,在瀏覽器中打開。以后改動該文件后,只要刷新瀏覽器頁面,就可觀察到最新的頁面。
2)添加兩個標簽,放置在第一與第二文本框后,內容分別為“不得為空”和“密碼長度不得小于6個字符”,并設置隱藏。
3)為第一個文本框添加事件。點擊“失去焦點時/設置可見性”,下方選擇標簽“不得為空”,再點擊下方“確定”按鈕。然后點擊“啟用用例”按鈕,彈出條件設置對話框,點擊“添加邏輯”,設置如下。這表明如果文本框是空的,就會將“不得為空”顯示出來。
?????????
你可以添加更多的邏輯,如判斷手機號是否正確,判斷郵箱是否正確等。
4)為密碼輸入框添加類似事件,當密碼長度小于6時顯示提示。
5)為“換一張”添加事件,點擊時將其左邊驗證碼換掉。
6)為“用戶協議”標簽、“注冊”按鈕、右上角“登錄”按鈕添加事件,轉至其它頁面(其它頁面內容不作要求)。
保存本文件,隨實驗報告一起上交。
3、了解并練習裝飾模式的用法
設計模式中裝飾模式的介紹如下:
裝飾(Decorator)模式的意圖
1)在不影響其他對象的情況下,以動態、透明的方式給單個對象添加職責;
2)當不能采用生成子類的方法進行擴充時。一種情況是,可能有大量獨立擴展,每一種組合將產生大量的子類,使得子類數目呈爆炸性增長。另一種情況是因為類定義被隱藏,或類定義不能用于生成子類
裝飾模式的結構:
裝飾模式的評價:
基于上述內容,編寫代碼,以兩種方式實現該模式:。
例1:游戲中,角色Character可以有屬性attack, defence,可以有裝備weapen, armour,可以對屬性造成影響,它們可以是類的屬性;可以隨時變成巨人gigantize,可以變狂暴furious,都可以對attack和defence形成影響,它們可以形成裝飾。
package io.shentuzhigang.demo.design;import org.junit.jupiter.api.Test;/*** @author ShenTuZhiGang* @version 1.0.0* @date 2020-11-19 14:22*/public class DecoratorTEST{@Testpublic void t(){Character person = new ConcreteCharacter();Decorator decorator = new Gigantize(new Person(person));decorator.weapen();decorator.armour();} } interface Character {public void weapen();public void armour(); } class ConcreteCharacter implements Character{@Overridepublic void weapen() {System.out.println("ConcreteCharacter+weapen");}@Overridepublic void armour() {System.out.println("ConcreteCharacter+armour");} } abstract class Decorator implements Character{private Character character;public Decorator(Character character){this.character = character;}String attack;String defence;@Overridepublic void weapen() {this.character.weapen();}@Overridepublic void armour() {this.character.armour();} } class Person extends Decorator {public Person(Character character) {super(character);}@Overridepublic void weapen() {super.weapen();System.out.println("Person+weapen");}@Overridepublic void armour() {super.armour();System.out.println("Person+armour");} }class Gigantize extends Decorator {public Gigantize(Character character) {super(character);}public void furious(){System.out.println("furious");}@Overridepublic void weapen() {super.weapen();System.out.println("Gigantize+weapen");}@Overridepublic void armour() {super.armour();System.out.println("Gigantize+armour");} }?
例2:考試成績Score,如果直接告訴(report)成績(例如65分),家長會生氣;加一個裝飾器,先告訴家長,這次考試比上次增加了幾分,家長會比較高興;加一個裝飾器,告訴家長,這次考試最高成績比我只高一點,家長也會比較高興;加一裝飾器,告訴家長,這次考試班級排名前列,家長也會比較高興。
package io.shentuzhigang.demo.design.score;import org.junit.jupiter.api.Test;/*** @author ShenTuZhiGang* @version 1.0.0* @date 2020-11-19 18:40*/ public class ScoreTEST {@Testpublic void t(){Person person = new Person();Decorator decorator = new Decorator_zero(new Decorator_first(new Decorator_two(person)));decorator.report();} } interface Reportor{void report(); } abstract class Decorator implements Reportor{private Reportor reportor;public Decorator(Reportor reportor){this.reportor = reportor;}@Overridepublic void report() {reportor.report();} }class Decorator_zero extends Decorator {public Decorator_zero(Reportor reportor) {super(reportor);}@Overridepublic void report() {System.out.println("這次考試比上次增加了幾分");super.report();} }class Decorator_first extends Decorator {public Decorator_first(Reportor reportor) {super(reportor);}@Overridepublic void report() {System.out.println("這次考試最高成績比我只高一點");super.report();} }class Decorator_two extends Decorator {public Decorator_two(Reportor reportor) {super(reportor);}@Overridepublic void report() {System.out.println("這次考試班級排名前列");super.report();} }class Person implements Reportor {@Overridepublic void report() {System.out.println("65");} }參考文章
設計模式——裝飾者(Decorator)模式DEMO——成績匯報的裝飾者模式實現
設計模式——裝飾者(Decorator)模式DEMO——游戲角色的裝飾者模式實現
設計模式之裝飾者模式(實例+Demo)
JAVA設計模式初探之裝飾者模式
總結
以上是生活随笔為你收集整理的《软件工程》实验报告——软件设计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设计模式——装饰者(Decorator)
- 下一篇: LeetCode176 第二高的薪水