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

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

2020-08-17 09:24:23朱紅梅王魯
現代信息科技 2020年9期

朱紅梅 王魯

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

關鍵詞:設計模式;裝飾設計模式;重構;教學過程

中圖分類號: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? 引? 言

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

1? 裝飾設計模式的出發點

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

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

2? 教學案例設計

2.1? 實例

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

一般實現:

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是地區的個數,m是特性個數,則用繼承實現描述人及其特性需要的類的個數是:1+n+n*()=1+n*2m

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

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

2.2? 分析問題重構代碼

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

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),由于多態,可以使得它在未來(運行時)成為子類的對象。當把以上代碼中的類Beijinger和Shanghaier都替換為Person后,發現這兩個類除了類名之外都相同,所以可以合并,變為:

class highPerson{

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

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

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

};

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

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

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

abstract class DecoratorPerson extends Person{ //中間類

Person person; //以聚合的方式來支持未來多態的變化

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

};

這樣,人的特性類就變為:

class highPerson extends DecoratorPerson{

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

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

};

客戶端調用:

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是地區的個數,m是特性個數,則需要的類的最終個數是:1+n+1+m<1+n*2m,開始時的n=2、m=2(高、富),所以需要的類是1+2+1+2=6個。此時,無論是增加地區還是增加特性,只需再增加一個類。重構后增加Handsome特性的結構圖如圖2所示。

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

2.3? 要點

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

3? 結? 論

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

參考文獻:

[1] 溫立輝.軟件設計模式分析 [J].科技創新與應用,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] 紀程宇,朱雪峰.設計模式組合操作優化研究 [J].計算機科學,2020,47(3):19-24.

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

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

主站蜘蛛池模板: 国产精品吹潮在线观看中文| 国产女人在线观看| 国产第一色| 亚洲国产成熟视频在线多多| 精品久久高清| 亚洲欧美日韩成人高清在线一区| 精品黑人一区二区三区| 人妻丰满熟妇AV无码区| 日韩天堂在线观看| 亚洲无线观看| 色视频久久| 成人福利免费在线观看| 久久久久久久97| 精品国产黑色丝袜高跟鞋| 香蕉在线视频网站| 波多野结衣一级毛片| 99热国产在线精品99| 国产黄视频网站| 国产精品无码AV中文| 精品久久久久成人码免费动漫| 国产综合精品一区二区| 国产永久在线视频| 久久国产精品电影| 国产极品美女在线播放| 玖玖免费视频在线观看| 日韩欧美成人高清在线观看| 亚洲精品人成网线在线 | 欧美精品另类| 国产免费精彩视频| 国产激情在线视频| 98超碰在线观看| 国产91麻豆免费观看| 夜精品a一区二区三区| 国产乱子伦手机在线| 国产在线欧美| 国产一二三区视频| 一本色道久久88亚洲综合| 中文字幕在线视频免费| 亚洲国产精品美女| 国产精品香蕉在线观看不卡| 国产精品林美惠子在线观看| 国产精品毛片一区| 日本午夜精品一本在线观看| 九九这里只有精品视频| 亚洲第一中文字幕| 日韩精品亚洲精品第一页| 成人午夜福利视频| 亚洲中文无码h在线观看| 九色综合视频网| 久操中文在线| 亚洲精品自拍区在线观看| 狠狠色狠狠色综合久久第一次| 亚洲中文字幕无码爆乳| a欧美在线| 精品成人免费自拍视频| 婷婷综合在线观看丁香| 国产在线精品人成导航| 成色7777精品在线| 久久久亚洲色| 一级毛片a女人刺激视频免费| 91人人妻人人做人人爽男同| 久久中文字幕2021精品| 国产经典免费播放视频| 激情在线网| 免费一级大毛片a一观看不卡| 午夜在线不卡| 精品国产一区二区三区在线观看| 99久久精品久久久久久婷婷| 老司机久久99久久精品播放| 国产91蝌蚪窝| 高清亚洲欧美在线看| 天天干天天色综合网| 国产精品亚洲αv天堂无码| 91美女视频在线| 亚洲成A人V欧美综合天堂| 国产91精品调教在线播放| 欧美日韩另类在线| 久久亚洲天堂| 亚洲妓女综合网995久久| 成人亚洲国产| 国产喷水视频| a亚洲视频|