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

基于JAVA的模板設(shè)計模式研究

2008-12-31 00:00:00劉繁艷
電腦知識與技術(shù) 2008年19期

摘要:在 Java 面向?qū)ο蟮某绦蛟O(shè)計中有效地利用模板設(shè)計模式, 可以巧妙解決變化對系統(tǒng)帶來的影響,使系統(tǒng)擴展性增強。本文重點討論了模板設(shè)計模式的定義與結(jié)構(gòu),并對其應(yīng)用進行了深入探討。

關(guān)鍵詞:模板方法;抽象類;具體類

中圖分類號:TP311文獻標(biāo)識碼:A文章編號:1009-3044(2008)19-30060-03

Studying the Design Model Based on Java

LIU Fan-yan

(Department of Information Engineering, Zhuzhou Professional Technology College, Zhuzhou 410000, China)

Abstract: Programming basic on Java Object Oriented, it would solve skillfully the change to the system, and enhance the system's extend if make full use of the template designing model. The article pays attetion to discuss the defing and structure of the template desinging modle, and lucubrate its application.

Key words: Template Method; Abstract Class; Entitative Class

1 引言

模板設(shè)計模式是一個很簡單的模式,卻被非常廣泛的使用。之所以簡單是因為在這個模式中僅僅使用到了繼承關(guān)系。而合理的利用繼承關(guān)系,能對系統(tǒng)設(shè)計起到很好的作用。模板設(shè)計模式就是其中的一個使用范例。深入研究模板設(shè)計模式能加深對繼承的理解,對OO的核心思想有更深更新的認(rèn)識,熟悉模扳設(shè)計模式是重新學(xué)習(xí)繼承的開始[1]。模板設(shè)計模式巧妙解決變化對系統(tǒng)帶來的影響。使用模板方法能使系統(tǒng)擴展性增強,最小化了變化對系統(tǒng)的影響。

2 定義與結(jié)構(gòu)

GOF給模板方法(Template Method)模式定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。使得子類可以不改變一個算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟。所謂算法的結(jié)構(gòu),可以理解為根據(jù)需求設(shè)計出來的業(yè)務(wù)流程。而特定的步驟就是指那些可能在內(nèi)容上存在變化的環(huán)節(jié)。模板設(shè)計模式的簡單模式結(jié)構(gòu)為:

1) AbstractClass(抽象類):定義了一到多個的抽象方法,以供具體的子類來實現(xiàn)它們;而且還要實現(xiàn)一個模板方法,來定義一個算法的骨架;

2) ConcreteClass(具體類):實現(xiàn)父類中的抽象方法以完成算法中與特定子類相關(guān)的步驟。

圖1即為模板設(shè)計模式的結(jié)構(gòu)圖。

圖1 模板設(shè)計模式的結(jié)構(gòu)圖

3 模板設(shè)計模式的應(yīng)用研究

模板設(shè)計模式的應(yīng)用很多,比如有在線購物功能的網(wǎng)站,經(jīng)常要對商品進行各種各樣的排名:按商品的點擊率排名、按商品的購買率排名、按商品的入站時間排名、按商品的類別進行的搜索等等。這些都是一些搜索功能,功能完全相同;不同的要么是搜索的算法。又比如,銀行利率的計算,都是利率乘以本金和存款時間,但是,各種存款方式計算利率的方式不同,一般而言,定期的存款利率比活期高,而定期的時間越長,它的利率也越高。因此,我們在設(shè)計“銀行帳戶”這個類的時候,可以將計算利息這個方法定義成抽象方法,在這個方法中,將計算利息的算法的骨架搭建出來,而對于一些細(xì)節(jié),推遲到子類中實現(xiàn)。

這個思路的實現(xiàn)方法為:我們給所有類型的帳戶定義一個超類LoanAccount,在這個超類中,有一個用于計算利息的方法caculateInterest(),已經(jīng)將它的算法寫好了,這個方法返回一個“本金*利率”的值。但是,因為其中的利率根據(jù)存款類型的不同而不同,所以沒有具體的實現(xiàn)獲得利率的方法,所以將這個獲得利率的方法放到具體的子類AccountA及AccountB中去實現(xiàn),根據(jù)不同的子類,設(shè)計出不同的獲得利率的方法。下面是這個思路的具體實現(xiàn):

//TestAccoutn.java,該程序已在J2SE中調(diào)試通過

abstract class LoanAccount{

public double Interest;//利息

public double fund;//本金

public double calculateInterest(){

Interest=getFund()*getInterestRate();//用于計算利率的算法:本金*利率,但是利率的算法實現(xiàn)并沒有在這個類中實現(xiàn)

System.out.println(Interest);

return Interest;}

public void setFund(double fund){

this.fund=fund;}

public double getFund(){

return fund;}

protected abstract double getInterestRate();//不同的存款類型有不同的利率,因此,不在這個父類中實現(xiàn)利率的計算方法,而將它推遲到子類中實現(xiàn)

}

class AccountA extends LoanAccount{

public double getInterestRate(){

return 1.1;

}//實現(xiàn)父類中沒有實現(xiàn)的用于獲取利率的抽象方法

}

class AccountB extends LoanAccount{

public double getInterestRate(){

return 1.2;

}//實現(xiàn)父類中沒有實現(xiàn)的用于獲取利率的抽象方法

}

public class TestAccount{

public static void main(String[] args){

LoanAccount accounta=new AccountA();

LoanAccount accountb=new AccountB();

accounta.setFund(1000);

accounta.calculateInterest();

accountb.setFund(1000);

accountb.calculateInterest();

}}

運行結(jié)果為:

1100.0

1200.0

4 模板中的方法及模板設(shè)計模式的適應(yīng)情況

4.1 模板中的方法

模板設(shè)計模式中有四種方法可用在派生類中:

1) 完整的方法。它完成了所有子類都要用到的一些基本功能。這些方法稱為具體的方法;

2) 方法中根本沒有內(nèi)容,必須在派生類中實現(xiàn)的方法。例如,前面說到的getInterestRate()方法;

3) 鉤子(hook)方法。這些方法里包含了某些操作的一種默認(rèn)實現(xiàn),派生類里可以使用默認(rèn)也可以重新定義這些方法;

4) 還可以有這樣一種方法:它們自己調(diào)用抽象方法、鉤子方法和具體方法的各種組合。這些方法不僅有待重定義,還描述了一個沒有實現(xiàn)細(xì)節(jié)的算法。

4.2 模板設(shè)計模式的適應(yīng)情況

根據(jù)上面對定義的分析,以及例子的說明,可以看出模板方法適用于以下情況:

1) 一次性實現(xiàn)一個算法的不變的部分,并將可變的行為留給子類來實現(xiàn);

2) 各子類中公共的行為應(yīng)被提取出來并集中到一個公共父類中以避免代碼重復(fù);

3) 控制子類擴展。模板方法只在特定點調(diào)用操作,這樣就只允許在這些點進行擴展。比如上例中的getInterestRate()方法。

5 結(jié)束語

模板方法模式在OOP程序設(shè)計中很常見,它既不復(fù)雜也不難理解,在設(shè)計中不應(yīng)該將它考慮得過于復(fù)雜。

模板方法模式是為了巧妙解決變化對系統(tǒng)帶來的影響而設(shè)計的。使用模板方法使系統(tǒng)擴展性增強,使變化對系統(tǒng)的影響最小化。

模板方法模式的第一個要點是,基類可以只定義一些它自己要使用的方法,把其余部分留到派生類中去實現(xiàn)。第二個要點是基類中的方法可以調(diào)用一系列的方法,其中有些方法在基類中實現(xiàn),有些方法在派生類中實現(xiàn)。模板方法定義了一個通用的算法,盡管細(xì)節(jié)部分在基類中沒有完全表現(xiàn)出來。

參考文獻:

[1] GOF. thinking in java[M].

[2] 教育部考試中心, 新東方教育科技集團.Java面向?qū)ο蟪绦蛟O(shè)計[M].

[3] 古凌嵐,羅佳,張嬋. Java程序設(shè)計[M].清華大學(xué)出版社,2005.

注:本文中所涉及到的圖表、注解、公式等內(nèi)容請以PDF格式閱讀原文

主站蜘蛛池模板: 伦伦影院精品一区| 国产精品视频观看裸模| 国产中文一区a级毛片视频| 波多野结衣一区二区三区88| 成年人免费国产视频| 国产视频入口| 无码aaa视频| 午夜福利无码一区二区| 免费A级毛片无码免费视频| 玖玖精品视频在线观看| 国产v精品成人免费视频71pao| 國產尤物AV尤物在線觀看| 久久久精品国产亚洲AV日韩| 少妇精品在线| 国产在线自乱拍播放| 国产91小视频| 9啪在线视频| 激情综合婷婷丁香五月尤物| 色吊丝av中文字幕| 欧美日韩精品一区二区在线线| 国产高清精品在线91| 国产SUV精品一区二区| 无码专区国产精品一区| 伊人久久久大香线蕉综合直播| 色综合久久88| 国产精品一区二区不卡的视频| 制服丝袜国产精品| 狠狠做深爱婷婷久久一区| 久久久精品无码一区二区三区| 99r在线精品视频在线播放| 午夜a级毛片| 狼友视频国产精品首页| 狠狠五月天中文字幕| 亚洲欧美不卡| 2019国产在线| 园内精品自拍视频在线播放| 精品国产成人三级在线观看 | 日韩在线永久免费播放| 欧美一级高清视频在线播放| 午夜日b视频| 99久久精品国产综合婷婷| 亚洲青涩在线| 免费观看精品视频999| 亚洲欧洲一区二区三区| 国产成人精品免费av| 制服丝袜在线视频香蕉| 女人一级毛片| 欧美性天天| 国产av一码二码三码无码| 亚洲熟女偷拍| 国产亚洲高清在线精品99| 欧美精品成人一区二区在线观看| 国产无码在线调教| 国产乱肥老妇精品视频| 视频二区欧美| 香蕉久久国产精品免| 国产精品亚洲精品爽爽| 四虎影视库国产精品一区| 色哟哟国产精品一区二区| 亚洲综合日韩精品| 国产高清精品在线91| 亚洲第一区欧美国产综合| 日韩精品无码不卡无码| 农村乱人伦一区二区| 99人妻碰碰碰久久久久禁片| 国产一区在线观看无码| 一级不卡毛片| 久久77777| 性做久久久久久久免费看| 亚洲男人的天堂在线| 国产尤物视频网址导航| 国产高清国内精品福利| 中文字幕亚洲另类天堂| 91久久偷偷做嫩草影院免费看| 国产精品七七在线播放| 婷婷丁香在线观看| 欧美成人精品一级在线观看| 日韩AV无码免费一二三区| 国产高清无码第一十页在线观看| 99视频精品全国免费品| 国产天天射| 成人日韩视频|