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

Java中單態(tài)設(shè)計模式的教學(xué)過程設(shè)計

2008-12-31 00:00:00趙會洋
計算機(jī)教育 2008年14期

摘要:單態(tài)設(shè)計模式在Java課程中很少涉及,本文講述了怎樣將此內(nèi)容巧妙地引入到課堂中去,并通過教學(xué)過程的合理設(shè)計,使得學(xué)生不但能夠輕松掌握此內(nèi)容,還可以深入理解其它的相關(guān)內(nèi)容。

關(guān)鍵詞:單態(tài)設(shè)計模式;Java;教學(xué)

中圖分類號:G642文獻(xiàn)標(biāo)識碼:A

1引言

設(shè)計模式是在大量的實踐中總結(jié)和理論化之后優(yōu)選的代碼結(jié)構(gòu)、編程風(fēng)格以及解決問題的思考方式。要成為一名優(yōu)秀的Java程序員,一般都需要掌握J(rèn)ava中的幾種設(shè)計模式,單態(tài)設(shè)計模式就是其中之一。但能否把此作為Java程序設(shè)計這門課的教學(xué)內(nèi)容的一部分,仍是一個值得商榷的問題。因為在眾多學(xué)者看來,此內(nèi)容復(fù)雜而難懂,因此在目前的教材中,尚未發(fā)現(xiàn)涉及此內(nèi)容的。本文作者在教學(xué)中引入了單態(tài)設(shè)計模式的教學(xué)內(nèi)容,結(jié)果證明只要對此內(nèi)容的教學(xué)過程進(jìn)行合理設(shè)計,學(xué)生不但可以掌握它,還可以深入理解掌握其它幾方面的知識。

2單態(tài)設(shè)計模式的含義及作用

所謂類的單態(tài)設(shè)計模式,就是采取一定的方法保證在整個的軟件系統(tǒng)中,對某個類只能存在一個對象實例,并且其它類可以通過某種方法訪問該實例。其主要作用是保證在Java應(yīng)用程序中,一個類Class只有一個實例存在。生活中很多方面我們都要用到此設(shè)計模式,例如建立目錄、數(shù)據(jù)庫連接、資源管理器等。

3單態(tài)設(shè)計模式的教學(xué)過程設(shè)計

3.1單態(tài)設(shè)計模式的提出

在教學(xué)中我們沒有直接講解怎么設(shè)計單態(tài)程序,而是采取循序漸進(jìn)的方法,不但讓學(xué)生輕松掌握該知識,還對Java面向?qū)ο蟮奶匦杂懈畹恼J(rèn)識。因此我們設(shè)計了如下的例1。

例1:

class Singleton

{

private int value; //注釋1

public Singleton() //注釋2

{

System.out.println(\"正在執(zhí)行構(gòu)造器....\");

}

//注釋3

public int getValue()

{

return value;

}

public void setValue(int value)

{

this.value = value;

}

}

class TestSingleton

{

public static void main(String args[])

{int v1,v2;

Singleton t1=new Singleton();

Singleton t2=new Singleton();

t1.setValue(3);

t2.setValue(5);

v1=t1.getValue();

v2=t2.getValue();

System.out.println(\"對象1的值為:\"+v1+\"\對象2的值為:\"+v2);

}

}

通過此例可以讓學(xué)生了解我們在設(shè)計一個類時,往往把其成員屬性設(shè)置成private訪問權(quán)限,使得其它類不能直接訪問該成員屬性,同時對外提供修改成員屬性的方法setXXX和讀取成員的方法getXXX,這些方法的訪問權(quán)限是public的,可被所有其它類訪問。這樣做的目的是我們可以在修改成員的方法中加入更具體的更合理的控制邏輯,例如我們可以在修改人的年齡的方法setAge中限定只能將年齡設(shè)置為0到150之間的數(shù),否則不允許修改。

讓學(xué)生掌握以上知識后,教師可提出在上例中創(chuàng)建了類Singleton的兩個實例,運行結(jié)果如圖1所示。我們也可以創(chuàng)建更多該類的實例,但某些情況下若只能產(chǎn)生某個類的一個實例,那么能否做到呢?在提出該問題后,可列舉生活中的例子,說明思考此問題的必要性,進(jìn)而提出單態(tài)設(shè)計模式的概念。接下來就引導(dǎo)學(xué)生對上面的程序進(jìn)行改進(jìn),來設(shè)計理解單態(tài)設(shè)計模式。

3.2單態(tài)設(shè)計模式的設(shè)計

產(chǎn)生某類的實例時需要調(diào)用該類的構(gòu)造方法,若該構(gòu)造方法可以被其他類直接訪問,就不能限制在其他類中只產(chǎn)生一個實例。因此,我們首先必須將類的構(gòu)造方法的訪問權(quán)限設(shè)置為private,這樣,此構(gòu)造方法就只能在本類中使用來創(chuàng)建對象,而不能用new 操作符在類的外部產(chǎn)生類的對象了,但在類內(nèi)部仍可以產(chǎn)生該類的對象。因此,應(yīng)將例1中的注釋2所在的行修改為private Singleton();,同時在注釋1所在的行創(chuàng)建一個對象,即private static Singleton instance=new Singleton();。

經(jīng)過以上的改進(jìn),在類的外部無法創(chuàng)建Singleton類的對象,但也無法得到類的對象。因此,我們需要在Singleton類的內(nèi)部對外提供一個可以訪問到對象的方法,并且該方法還必須是靜態(tài)的,因為調(diào)用該方法時外部類中還沒有對象,只能通過類名來訪問。又因為靜態(tài)方法不能直接訪問類中的非靜態(tài)成員變量,所以,該類內(nèi)部產(chǎn)生的那個對象變量也必須定義成靜態(tài)的。由此,我們需要在例1中注釋3所在的位置加入下面的方法:

public static Singleton getInstance()

{

return instance;

}

3.3單態(tài)設(shè)計模式的測試

對例1經(jīng)過以上的改進(jìn)后,類Singleton是否就只能產(chǎn)生一個實例呢?我們設(shè)計了如下的例2對其進(jìn)行測試。

例2:

class TestSingleton

{

public static void main(String args[])

{int v1,v2;

Singleton t1=Singleton.getInstance();

Singleton t2=Singleton.getInstance();

if(t1==t2) System.out.println(\"只能創(chuàng)建一個實例\"); //注釋4

t1.setValue(3);

t2.setValue(5);

v1=t1.getValue();

v2=t2.getValue();

System.out.println(\"對象1的值為:\"+v1+\"\對象2的值為:\"+v2); //注釋5

}

}

在此測試程序中,雖然聲明了兩個Singleton類的對象名t1和t2,并通過類Singleton的getInstance()方法得到了該類的實例,但實際上無論在外部類中調(diào)用幾次getInstance()方法,訪問到的都是同一個對象。為了證明此結(jié)論,在測試程序例2中我們設(shè)計了兩個測試方法。第一個測試方法是在注釋4所在的行,我們對t1和t2進(jìn)行是否相等的比較,若相等則輸出“只能創(chuàng)建一個實例”這個字符串。大家都知道“==”運算符比較的是兩個對象名的引用值是否相等,若相等說明這兩個對象名指向的是同一個對象。第二個測試方法是在注釋5所在的行,分別輸出對象t1、t2的value成員的值。若二者相等并且都是5,則說明t1和t2指向的是同一個對象,若v1的值為3,v2的值為5,則說明t1和t2指向的是不同的實例對象。測試程序的運行結(jié)果如圖2所示,驗證了t1和t2是同一個對象,即對例1經(jīng)過改進(jìn)后的程序是一個單態(tài)程序,外部類只能獲得Singleton類的一個實例。

4結(jié)束語

筆者將上述設(shè)計過程應(yīng)用于兩屆學(xué)生,均取得了良好的效果。實踐證明,單態(tài)設(shè)計模式雖然難懂,但只要教師對其教學(xué)過程進(jìn)行合理設(shè)計,學(xué)生不但能夠掌握該知識,還可以從中加深對其他知識的理解。本文語言通俗,教學(xué)過程設(shè)計巧妙,可以為自學(xué)單態(tài)設(shè)計模式的學(xué)生提供良好的幫助,也可以為教師教學(xué)提供借鑒。

The Teaching Process Design of Singleton Design Pattern

WANG Shuang, ZHAO Hui-yang

(College of Computer Science and Technology, Xuchang University, Xuchang 461000, China)

Abstract: Singleton design pattern is very little involved in the Java cource. This paper tells us how to introduce it into classroom teaching ingeniously. And student can not only grasp this content easily but also understand other related contents deeply by teachers’ designing teaching process reasonably.

Keywords: Singleton Design Pattern, Java, teaching

參考文獻(xiàn):

[1] 耿祥義,張躍平. Java 2實用教程(第3版)[M]. 北京:清華大學(xué)出版社,2006.

[2] 朱喜福. Java程序設(shè)計(第2版)[M]. 北京:人民郵電出版社,2007.

主站蜘蛛池模板: 婷婷激情亚洲| 国产剧情一区二区| 国内精品免费| 亚洲人成日本在线观看| 在线视频亚洲欧美| 亚洲成网777777国产精品| 丁香婷婷在线视频| 欧美色图久久| 日韩国产亚洲一区二区在线观看| 国产精品第| 97视频精品全国免费观看 | 热这里只有精品国产热门精品| 国产精品亚洲а∨天堂免下载| 亚洲欧美精品日韩欧美| 免费网站成人亚洲| 亚洲首页国产精品丝袜| 国产黄色片在线看| 喷潮白浆直流在线播放| 免费人成黄页在线观看国产| 怡春院欧美一区二区三区免费| 亚洲国产91人成在线| 色有码无码视频| 18禁黄无遮挡免费动漫网站| 色视频国产| 亚洲日韩Av中文字幕无码| 亚洲精品第一页不卡| 91网址在线播放| 国产永久免费视频m3u8| 国产精品极品美女自在线看免费一区二区 | 91系列在线观看| 亚洲精品片911| 欧美a级在线| 亚洲国产成人在线| 麻豆a级片| 日韩小视频在线观看| 波多野结衣视频一区二区| 国产免费网址| 午夜影院a级片| 国产精品蜜臀| 一边摸一边做爽的视频17国产| 日韩精品无码一级毛片免费| 亚洲AV无码久久天堂| 久久国产高清视频| 日本在线欧美在线| 狠狠色丁香婷婷综合| 色综合天天娱乐综合网| 国产麻豆aⅴ精品无码| 青青国产视频| 久久综合色视频| 欧美区一区二区三| 夜夜操国产| a在线亚洲男人的天堂试看| 中文字幕伦视频| 国产精品.com| 青青草国产精品久久久久| 久久99热66这里只有精品一| 亚洲精品777| 亚洲精品视频免费看| 无码 在线 在线| 国产女人喷水视频| 五月婷婷综合色| 免费播放毛片| 亚洲第一区精品日韩在线播放| 99视频只有精品| 成人无码区免费视频网站蜜臀| 99热这里只有精品免费| 试看120秒男女啪啪免费| 国产欧美成人不卡视频| 亚洲国产黄色| 中文国产成人精品久久一| 91精品国产自产在线观看| 国内黄色精品| 99视频在线免费| 久久久久国产精品嫩草影院| 国产成人h在线观看网站站| 青青草国产一区二区三区| 亚洲综合久久一本伊一区| 日韩国产高清无码| 国产精品综合久久久| 伊人成色综合网| 久久久久中文字幕精品视频| 国产精品2|