亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        裝飾設計模式的教學過程研究

        2020-08-17 09:24:23朱紅梅王魯
        現(xiàn)代信息科技 2020年9期
        關(guān)鍵詞:設計模式教學過程重構(gòu)

        朱紅梅 王魯

        摘? 要:針對軟件各種設計模式的定義不容易被透徹理解和靈活應用的問題,文章以裝飾設計模式為例介紹其教學過程,深入解析裝飾設計模式的動機,通過教學案例引入具體問題,從一般實現(xiàn)代碼中發(fā)現(xiàn)存在的問題,經(jīng)過分析和重構(gòu)得出裝飾設計模式的結(jié)構(gòu)和要點,使學生對裝飾設計模式有更深入的理解,達到讓學生日后可以靈活使用該模式的目的。

        關(guān)鍵詞:設計模式;裝飾設計模式;重構(gòu);教學過程

        中圖分類號:TP312;G642.0? ? ? 文獻標識碼:A 文章編號:2096-4706(2020)09-0101-03

        Teaching Process Research of Decorator Design Pattern

        ZHU Hongmei,WANG Lu

        (College of Information Science and Engineering,Shandong Agricultural University,Taian? 271018,China)

        Abstract:Aiming at the problem that the definitions of various software design patterns is not easy to be fully understood and flexibly applied,this paper takes Decorator Design Pattern as an example for teaching process design. The motivation of decoration design pattern is deeply analyzed. A specific problem as teaching case is introduced. From the general implementation of the example existing problems is found. The structure and key points of the decorator design pattern is gotten through analysis and reconstruction,through which the students have a deeper understanding of the decorator design pattern and achieve the purpose of flexible use of it.

        Keywords:design pattern;decorator design pattern;reconstruction;teaching process

        0? 引? 言

        軟件設計模式是指在軟件開發(fā)中經(jīng)過驗證并用于解決在特定環(huán)境下、重復出現(xiàn)的、特定問題的解決方案,體現(xiàn)了思想級別的成果復用[1]。由于對現(xiàn)代軟件產(chǎn)品的通用性、擴展性、復用性要求越來越高,軟件開發(fā)過程中需求的不斷變化和深入使得人們越來越重視軟件設計模式。裝飾(Decotator)設計模式,也稱包裝模式,是軟件設計模式中的一個重要的設計模式,GoF給出的定義是動態(tài)地給一個對象添加一些額外的職責,就擴展對象的功能來說,裝飾設計模式比生成子類更為靈活[2]。從定義上來看,初學者很難把握。為達到幫助學生真正理解裝飾設計模式的教學目標,教師應成為教學中的導航者、學生學習的幫助者與引路人[3],培養(yǎng)學生從專業(yè)的角度來評價設計方案,引導學生領悟優(yōu)秀設計案例的構(gòu)思過程[4]。每種模式都有自身獨特的應用場景[5],在教學過程中就不能簡單給出設計模式的定義和結(jié)構(gòu)圖,要求學生照圖寫代碼,而是深入解析裝飾設計模式的動機,通過實例引入具體問題,通過對實例的分析和重構(gòu)得出裝飾設計模式的結(jié)構(gòu)和要點。

        1? 裝飾設計模式的出發(fā)點

        在面向?qū)ο筌浖O計中,很自然就會想到使用繼承來擴展對象的功能,由于繼承破壞封裝,提高了子類與父類之間的耦合性,隨著擴展功能的增多子類也會增多,擴展功能的組合也會導致出現(xiàn)各種組合的子類,進而引發(fā)子類的膨脹。因此,過度地使用繼承來擴展對象的功能存在一定的缺陷。

        裝飾設計模式的目的就是為了在動態(tài)擴展對象功能的同時,避免擴展功能的增多帶來子類激增,從而將功能擴展這種變化所導致的影響降為最低。

        2? 教學案例設計

        2.1? 實例

        人來自不同地區(qū),如北京、上海,不同地區(qū)的人又有各種特性,描述人及其特性。如果有特性:高和富,則有組合:高、富、高富等共3個特性描述;用繼承實現(xiàn)的結(jié)構(gòu)圖如圖1所示。如果增加1個特性:帥,則描述一個人可以有組合:高、富、帥、高富、高帥、富帥、高富帥等共7個特性描述。

        一般實現(xiàn):

        abstract class Person{ //公共基類

        String name;

        public abstract void desc();

        };

        //主體類

        class Beijinger extends Person{

        public void desc() { System.out.println(name+" 是北京人"); }

        };

        class Shanghaier extends Person{

        public void desc() { System.out.println(name+" 是上海人"); }

        };

        //擴展類

        class highBeijinger extends Beijinger{

        public void desc() { super.desc(); System.out.println(" 是高個人"); }

        };

        class richBeijinger extends Beijinger{

        public void desc() { super.desc(); System.out.println(" 是富人"); }

        };

        class highrichBeijinger extends Beijinger{

        public void desc() { super.desc(); System.out.println(" 是高個富人"); }

        };

        class HighShanghaier extends Shanghaier{……};

        class RichShanghaier extends Shanghaier{……};

        class highrichShanghaier extends Shanghaier{……};

        public class program {

        public static void main(String[] args){

        highBeijinger hc = new highBeijinger(); hc.setName("Zhangsan");

        richBeijinger rc = new richBeijinger(); rc.setName("Lisi");

        hc.desc(); rc.desc();

        }

        }

        假設n是地區(qū)的個數(shù),m是特性個數(shù),則用繼承實現(xiàn)描述人及其特性需要的類的個數(shù)是:1+n+n*()=1+n*2m

        如果n=2,m=2(高、富),則需要定義1+2*22=9個

        類;如果n=2,m=3(高、富、帥),則需要定義1+2*23= 17個類??梢姡美^承來擴展對象的功能會導致子類數(shù)量的急劇膨脹。雖然這種分析非常直觀,但是如果就此直接引入裝飾設計模式,學生難以理解。這就需要把一般實現(xiàn)的代碼通過重構(gòu)引出裝飾設計模式。

        2.2? 分析問題重構(gòu)代碼

        分析1:觀察一般實現(xiàn)的代碼可以發(fā)現(xiàn),隨著需求的變化,使用繼承得到的擴展使子類急劇增多,同時充斥著大量重復代碼。這時候的關(guān)鍵是劃清責任,以“高”為例說明用組合/聚合代替繼承的實現(xiàn):

        class highBeijinger{

        Beijinger person; //用聚合代替繼承

        public void desc() { person.desc();System.out.println(" 是高個人"); }

        public highBeijinger(Beijinger person) { this.person = person; }

        };

        class highShanghaier {

        Shanghaier person; //聚合代替繼承

        public void desc() { person.desc();System.out.println (" 是高個人"); }

        public highShanghaier (Shanghaier person) { this.person = person; }

        };

        分析2:當一個變量的聲明類型都是某個基類(Person)的子類(Beijinger,Shanghaier)的時候,就該將它聲明為這個基類(Person),由于多態(tài),可以使得它在未來(運行時)成為子類的對象。當把以上代碼中的類Beijinger和Shanghaier都替換為Person后,發(fā)現(xiàn)這兩個類除了類名之外都相同,所以可以合并,變?yōu)椋?/p>

        class highPerson{

        Person person; //用基類代替子類

        public void desc() { person.desc();System.out.println (" 是高個人"); }

        public highPerson(Person person) { this.person = person; }

        };

        分析3:擴展時需要限制這個highPerson類實現(xiàn)抽象接口函數(shù)public void desc(),為了保證從繼承轉(zhuǎn)為組合/聚合后的函數(shù)public void desc()仍然遵循接口規(guī)范,還是需要通過繼承來完善接口規(guī)范,不過只需要繼承基類Person。繼續(xù)對highPerson類作如下修改:

        class highPerson extends Person //為實現(xiàn)接口public void desc()繼承基類Person

        分析4:這里,highPerson、richPerson和highrichPerson三個類中都含有字段Person person。根據(jù)重構(gòu)原則,當多個類中含有重復字段和方法,應該將其提到基類中去。但是,如果將Person person提到Person基類中去,會發(fā)現(xiàn)這是不合理的。為解決這個問題,這里設計一個中間類DecoratorPerson。

        abstract class DecoratorPerson extends Person{ //中間類

        Person person; //以聚合的方式來支持未來多態(tài)的變化

        public DecoratorPerson(Person person) { this.person = person; }

        };

        這樣,人的特性類就變?yōu)椋?/p>

        class highPerson extends DecoratorPerson{

        public void desc() { person.desc();System.out.println(" 是高個人"); }

        public highPerson(Person person) { super(person); }

        };

        客戶端調(diào)用:

        Beijinger p=new Beijinger(); p.setName("Zhangsan");

        highPerson hc=new highPerson(p); hc.desc();

        richPerson rc=new richPerson(p); rc.desc();

        分析5:這里,類richPerson和highPerson都繼承自Person,并持有Person類的成員,所以就可以用一個highPerson對象初始化richPerson對象的Person成員,語句如下:

        richPerson rp=new richPerson(hc); rp.desc();

        這樣,不需要組合特性highrichPerson類也可以描述組合特性,就可以刪除組合特性類,僅保留單個特性。設n是地區(qū)的個數(shù),m是特性個數(shù),則需要的類的最終個數(shù)是:1+n+1+m<1+n*2m,開始時的n=2、m=2(高、富),所以需要的類是1+2+1+2=6個。此時,無論是增加地區(qū)還是增加特性,只需再增加一個類。重構(gòu)后增加Handsome特性的結(jié)構(gòu)圖如圖2所示。

        由這個實例的結(jié)構(gòu)圖自然就引出了裝飾設計模式的結(jié)構(gòu)圖,此處不贅述。

        2.3? 要點

        裝飾設計模式里的繼承是為了接口的規(guī)范,組合/聚合是為了將來支持具體實現(xiàn)類、充分利用多態(tài)性消除沒必要的派生類。既繼承又組合/聚合是裝飾設計模式的特色。裝飾設計模式通過采用組合/聚合而不僅僅是繼承的手法根據(jù)需要向多個方向擴展相互獨立的功能,在運行時動態(tài)裝配這些功能,實現(xiàn)比定義組合類更靈活的不同功能的組合,這一過程避免了使用繼承帶來的靈活性差和功能擴展時的子類爆炸問題。

        3? 結(jié)? 論

        裝飾設計模式的上述教學過程已經(jīng)應用到我校計算機專業(yè)軟件設計模式課程教學中,學生反映良好。軟件設計模式是設計方面的模板,它不是憑空想象出來的,而是實踐中的經(jīng)驗總結(jié),老師要向?qū)W生傳授軟件設計模式的形成過程。本文以裝飾設計模式為例介紹了它的設計動機,通過具體實例的一般實現(xiàn)及其改進思路,經(jīng)過分析重構(gòu),使學生自然得出裝飾設計模式,引導學生發(fā)現(xiàn)其要點,這樣才能更深入地理解,并把理論思想融合在系統(tǒng)架構(gòu)中。

        參考文獻:

        [1] 溫立輝.軟件設計模式分析 [J].科技創(chuàng)新與應用,2020(7):92-93.

        [2] GAMMA E,HELM R,JOHNSON R,et al.Design Patterns:Elements of Reusable Object-Oriented Software [M]. New Jersey USA:Addison-Wesley Publishing Company,1995.

        [3] 肖力,周斌.推進信息化教學 打造精彩教學設計 [J].物理教師,2020,41(2):25-29+32.

        [4] 楊承清,呂耀平,戴慶敏,等.基于直觀認知的《園林設計初步》過程性教學改革探析 [J].西南師范大學學報(自然科學版),2019,44(11):161-166.

        [5] 紀程宇,朱雪峰.設計模式組合操作優(yōu)化研究 [J].計算機科學,2020,47(3):19-24.

        作者簡介:朱紅梅(1969.12—),女,漢族,上海崇明人,副

        教授,博士,研究方向:知識工程、智能信息處理;王魯(1981. 11—),男,漢族,山東泰安人,副教授,博士,研究方向:智能信息處理。

        猜你喜歡
        設計模式教學過程重構(gòu)
        仿生設計模式的創(chuàng)新應用探索
        玩具世界(2023年6期)2024-01-29 12:14:36
        “1+1”作業(yè)設計模式的實踐探索
        長城敘事的重構(gòu)
        攝影世界(2022年1期)2022-01-21 10:50:14
        北方大陸 重構(gòu)未來
        交通機電工程設計模式創(chuàng)新探討
        北京的重構(gòu)與再造
        商周刊(2017年6期)2017-08-22 03:42:36
        淺談科技英語教學
        東方教育(2016年17期)2016-11-23 09:34:01
        淺談高校乒乓球教學過程中的問題及對策
        欣賞教育在中學化學教學中的實施
        基于SPC技術(shù)的課堂教學質(zhì)量監(jiān)控系統(tǒng)研究
        欲求不満の人妻松下纱荣子| 国产日产久久福利精品一区| 亚洲av大片在线免费观看| av影院在线免费观看不卡| 国产午夜精品一区二区三区| 久久精品亚洲牛牛影视| 扒开非洲女人大荫蒂视频| 成人自拍小视频在线看| 久久久久久亚洲av无码蜜芽| 五月天综合在线| 农村国产毛片一区二区三区女| 国产伦一区二区三区色一情| 国模丽丽啪啪一区二区| 精品国产福利在线观看网址2022| 国产三级三级三级看三级日本| 91九色人妻精品一区二区三区| 亚洲女初尝黑人巨高清 | 国产精品三级在线不卡| 国产高清在线精品一区app| 色狠狠av老熟女| 国产成人永久在线播放| 亚洲熟女av在线观看| 含紧一点h边做边走动免费视频| 亚洲av色先锋资源电影网站| 精品黄色av一区二区三区| 成人免费av色资源日日| 一本色道无码道在线观看| 99视频全部免费精品全部四虎| 国产精品农村妇女一区二区三区| 国产成人久久精品一区二区三区| 黄色a级国产免费大片| 国产清品夜色一区二区三区不卡| 亚洲偷自拍国综合第一页国模| 日韩人妻熟女中文字幕a美景之屋| 亚洲精品综合一区二区三| 男人天堂AV在线麻豆| 99久久国产精品免费热| 国产精品 人妻互换| 亚洲都市校园激情另类| 日本亚洲视频免费在线看| 国产精品美女久久久久av福利|