999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于模板方法與抽象工廠的復合模式①

2020-06-20 07:32:18林欣欣郭元術運杰倫蘇欣欣
計算機系統應用 2020年6期
關鍵詞:產品方法

林欣欣,郭元術,運杰倫,蘇欣欣

(長安大學 信息工程學院,西安 710064)

引言

自Erich Gamma、Richard Helm 等提出23 種“設計模式”[1,2]后,人們對于設計模式方面的研究越來越重視,程序設計人員對23 種設計模式進行了學習[3-5],并將其運用于實踐.

軟件設計模式描述的是在面向對象軟件設計過程中針對特定問題提出的解決方案,應用該解決方案可以得到高內聚、低耦合并且復用性更高的程序.這些方案并不是人們一開始就采用的設計方案,而是為增加軟件的靈活性和可復性進行的總結[1].

面向對象程序設計原則[6]包含開閉、依賴倒置、單一職責等7 條原則.為保證軟件的靈活性、可復用性以及健壯性各個原則均是需要努力保證滿足的.

程序設計人員在實踐過程中發現獨立的應用某一種設計模式,并不能很好的滿足程序設計的需求.如文獻《模板方法模式的改進》[7]通過將策略者模式嵌入到模板方法模式,從而對模板方法模式進行改進,該模式是將延遲到子類的算法的不同實現方式寫入到各個類,各個類之間可以相互替換.

本文將討論模板方法及抽象工廠模式,并將抽象工廠模式放在模板方法模式中進行討論,最終給出復合模式.本文的復合模式側重點在于延遲到子類的算法如果使用到具體的其他的類,如何在保證“單一職責”的原則下進行其他具體類對象的引用,并且使得各個子類的替換較為便捷.復合模式還在一定程度上解決了模板方法模式由于變化的子類實現方式過多而造成系統龐大的問題,并且給出了復合模式的UML 結構圖,其他程序設計人員可以直接復用該復合模式.

1 模板方法模式

模板方法模式[8]UML 結構圖[9-11]如圖1所示.

圖1 模板方法模式結構圖

模板方法模式中包括兩類參與者:

(1)算法定義類(AbstractClass):該類包括模板方法、具體方法、抽象方法.在結構圖中TemplateMethod()為模板方法,PrimitiveOperation1()與PrimitiveOperation2()為模板方法中的兩個抽象操作.

(2)具體實現類(ConcreteClass):重新定義模板方法中的抽象操作以提供具體的行為.ConcreteClass 類實現方式的不同可以使得算法的實現各不相同.

2 抽象工廠模式

抽象工廠模式[12,13]UML 結構圖如圖2所示.

圖2 抽象工廠模式結構圖

抽象工廠模式中包括5 類參與者:

(1)抽象工廠(AbstractFactory):以抽象的方式創建一個完整的產品族.

(2)具體工廠(Factory1,Factory2):創建具體的產品對象,不同的具體工廠對配置不同的具體產品進行生產.

(3)抽象產品(AbstractProductA,AbstractProductB):對一類產品進行抽象,為一類產品對象聲明一個接口.

(4)具體產品(ProductA1,ProductA2,ProductB1,ProductB2):有著自己獨特配置的產品,被相應的具體工廠所生產.

(5)代碼調用者(Client):Client 不是人,而是代碼的調用者.

3 復合模式的設計

模板方法模式的意圖是:父類定義一個算法的框架,用模板方法規定算法的執行步驟,將可變的步驟延遲到子類實現,每一種不同的實現都定義一個新的子類,父類調用子類,子類對父類進行靈活的拓展.在本文的模板方法模式中,如果延遲到具體子類ConcreteClass的抽象操作PrimitiveOperation1()是從多個產品族中選取一種產品族實現算法步驟,如果將所有類型以實例化的形式寫在ConcreteClass 中,代碼復用性不高、靈活性不強.因此考慮將抽象工廠模式嵌入到模板方法模式中.抽象工廠模式的意圖是:在抽象工廠類中以抽象的形式創建一個完整的產品族,在創建產品族的過程中不關注產品的具體實現類.用戶只需根據自己所需產品族的類型選擇具體工廠,而不需要關注產品族中產品的創建.創建一個抽象工廠AbstractFactory,該抽象工廠創建一個完整的產品族,其子類具體工廠ConcreteFactory1、ConcreteFactory2 等生產產品類型各不相同的具體產品,并且當需要添加新的產品類型時只需添加AbstractFactory 的子類即可,而無需改動其他的類,延遲到ConcreteClass 中的算法步驟就可以在不指定產品類型的情況下創建一個AbstractFactory的引用,并將該引用指向子類對象ConcreteFactory1或ConcreteFactory2,從而獲得產品對象[14].在此過程中,產品對象的獲得不是通過直接new 的方式,而是通過函數的調用,這樣使得對象的創建和對象實現的業務相分離,降低系統的耦合度.AbstractClass 通過對ConcreteClass 的調用完成全部的算法流程.

復合模式UML 結構圖如圖3所示.

圖3 復合模式結構圖

復合模式中包括6 類參與者:

(1)算法定義類(AbstractClass):作用同模板方法模式中的算法定義類.

(2)具體實現類(ConcreteClass):作用同模板方法模式中的具體實現類,同時,又充當抽象工廠模式中的Client 接口.

(3)抽象工廠(AbstractFactory):作用同抽象工廠模式中的抽象工廠類.

(4)具體工廠(Factory1,Factory2):作用同抽象工廠模式中的具體工廠類.

(5)抽象產品(AbstractProductA,AbstractProductB):作用同抽象工廠模式中的抽象產品類.

(6)具體產品(ProductA1,ProductA2,ProductB1,ProductB2):作用同抽象工廠模式中的具體產品類.

4 復合模式的實現

考試期間有個別同學作弊是一直存在的問題.某老師為解決該問題,給出的解決方案是:按照個人學號分配試卷,試卷題目相同,但出現順序不同.該方案確實能一定程度上解決同學之間相互抄襲的問題,但并不能完全杜絕.并且,該方案對改卷老師并不友好,要求改卷老師能明確知道每道題目的答案.批改試卷的效率較低,難度較大.

對于各高校而言,存在足夠的資源進行上機測試.復合模式應用于在線測試系統的后臺程序編程中,并將結果放到頁面顯示.后臺結構圖如圖4所示.

圖4 考試模塊結構圖

算法中包括6 類參與者:

(1)考試抽象類:模板方法定義完成考試的步驟.其中生成試卷功能交給子類具體實現.

(2)考試實現類:通過使用試卷生成工廠及其子類對象完成試卷生成功能.

(3)試卷生成工廠:定義產品族,產品族包括選擇題與填空題.

(4)易試卷生成工廠、難試卷生成工廠:分別返回難易程度為易與難的選擇題對象與填空題對象.

(5)選擇題抽象類、填空題抽象類:分別定義選擇題與填空題的共性以便子類進行繼承.

(6)易選擇題、難選擇題、易填空題、難填空題:從數據庫中查詢并返回對應難度的選擇題或者填空題.

4.1 核心功能代碼

(1)考試抽象類:

(2)考試實現類:

(3)試卷生成工廠:

(4)易試卷生成工廠:

(5)選擇題抽象類:

(6)易選擇題:

4.2 運行結果

本文首先以試卷列表的形式展示生成的試卷.如圖5所示,試卷因難易程度不同而題目編號各不相同.

難度系數為易、難的選擇題如圖6所示.

在本項目中,若用戶需要試卷難易程度為“中等”的試卷,只需創建新的“中等選擇題”類、“中等填空題”類與“中等試卷生成工廠”類,新建的類各自繼承其父類,重寫父類的方法.“試卷生成工廠”以上的程序結構均不需要改變,該過程充分體現了程序的靈活性.因為該程序遵循“單一職責”原則,即每個類只具有單一的功能,當其他項目需要題目類,如選擇題類,可以直接使用該類及其子類,即該程序具有可復用性.新增“中等”難度的試卷如圖7所示.

5 結束語

復合模式的優點:本文中復合模式是指將抽象工廠模式嵌入到模板方法模式中從而形成的集成兩者優點的新模式.模板方法模式的反向控制機制保證了算法整體的穩定性,反向控制機制的原理為:父類調用子類,子類對父類進行靈活的拓展.抽象工廠模式的優點一:它將具體的類進行了分離,工廠對具體產品的創建過程進行了封裝,在不實例化的情況下創建產品對象.抽象工廠模式的優點二:產品族的替換方便,抽象工廠以抽象的形式實現了一個完整的產品族的創建,每個具體工廠生產配置不同的產品族.具體工廠類只在創建抽象工廠對象的時候出現一次,因此具體工廠的替換很容易.復合模式集成了二者的優點,對延遲到子類的算法步驟的實現進行了靈活的擴展,保證了算法結構的穩定性,又分離了具體的實現類,使得系統的健壯性、靈活性以及可復用性得到了增強.

圖6 選擇題題目

圖7 試卷列表

復合模式的缺點:難以支持新種類的產品.

復合模式的適用性:需實現算法的邏輯框架相同,但每個步驟根據對象不同而實現的細節不同,且該細節是從多個產品族中選取的一個系列進行實現.

猜你喜歡
產品方法
好產品,可持續
現代裝飾(2022年4期)2022-08-31 01:39:32
從靈感出發,邂逅好產品
現代裝飾(2022年3期)2022-07-05 05:55:06
學習方法
用對方法才能瘦
Coco薇(2016年2期)2016-03-22 02:42:52
四大方法 教你不再“坐以待病”!
Coco薇(2015年1期)2015-08-13 02:47:34
2015產品LOOKBOOK直擊
Coco薇(2015年1期)2015-08-13 02:23:50
賺錢方法
捕魚
新產品
玩具(2009年10期)2009-11-04 02:33:14
產品
個人電腦(2009年9期)2009-09-14 03:18:46
主站蜘蛛池模板: 亚洲综合亚洲国产尤物| 亚洲精品大秀视频| 91口爆吞精国产对白第三集| 久久免费视频6| 亚洲精品另类| 国产精品开放后亚洲| 高潮毛片无遮挡高清视频播放| 国产精品主播| 久久综合伊人77777| 国产成人艳妇AA视频在线| 亚洲精品国产首次亮相| 四虎永久在线精品国产免费| 国产18在线播放| 熟女成人国产精品视频| 精品亚洲欧美中文字幕在线看| 国产在线无码av完整版在线观看| 国产精品久久自在自线观看| 色综合热无码热国产| 日韩免费中文字幕| 欧美福利在线播放| 欧美乱妇高清无乱码免费| 亚洲男人天堂2020| 尤物亚洲最大AV无码网站| 亚洲精品色AV无码看| 国精品91人妻无码一区二区三区| 波多野结衣国产精品| 亚洲精品在线91| 日韩精品免费一线在线观看 | 欧美日韩精品在线播放| 国产爽歪歪免费视频在线观看 | 国产欧美日韩综合在线第一| 欧美精品导航| 亚洲精品片911| 亚洲毛片网站| 免费观看无遮挡www的小视频| 欧美精品色视频| 日本三级精品| 香蕉视频在线观看www| 天堂成人av| 国产精品一区在线观看你懂的| 国产成人一级| 青青草原国产av福利网站| 色窝窝免费一区二区三区 | 国产成人精品男人的天堂| 国产精品欧美激情| 国产在线精品99一区不卡| 在线免费不卡视频| 亚洲成综合人影院在院播放| a级毛片免费网站| 91久久国产综合精品| 国产真实乱子伦精品视手机观看| 午夜人性色福利无码视频在线观看| www.91中文字幕| 国产成人亚洲精品蜜芽影院| 99热国产在线精品99| 国产成人福利在线| 97人妻精品专区久久久久| 国产 在线视频无码| 亚洲a免费| 色婷婷天天综合在线| 久久精品人人做人人爽电影蜜月| 亚洲成人一区二区三区| 不卡无码网| 国产麻豆另类AV| 日韩视频福利| 欧美视频在线不卡| 国产杨幂丝袜av在线播放| 女人18毛片一级毛片在线| 大香伊人久久| 久视频免费精品6| 在线观看免费黄色网址| 国产幂在线无码精品| 亚洲日韩久久综合中文字幕| 一区二区三区在线不卡免费| 日本不卡视频在线| 欧美精品H在线播放| 国产亚洲精| 日韩精品成人在线| 国产成人精品在线1区| 欧美日韩一区二区三| 国产九九精品视频| 在线观看国产精品日本不卡网|