設(shè)計(jì)模式——訪問(wèn)者模式
Visitor模式允許我們?cè)诓桓膭?dòng)原有結(jié)構(gòu)的基礎(chǔ)之上不斷增加新的功能。
ICumulation接口定義了方法Cumulate(),旨在計(jì)算1+2+……+n,有兩種不同的實(shí)現(xiàn)方法,一個(gè)是一般的疊加算法GeneralArithmetic,一個(gè)是高斯算法GaoSiArithmetic。
因?yàn)槟撤N原因,系統(tǒng)需要添加求平均值的功能,還有計(jì)算1到n的平方和。
按照一般的思路,我們需要在ICumulation中定義兩個(gè)方法分別計(jì)算平均值和平方和,并在實(shí)現(xiàn)類(lèi)中同時(shí)添加相應(yīng)的方法。在搭建了visitor模式的架構(gòu)以后,添加功能的代碼被移植到ICumulationVisitor中,添加的兩種功能也分別被以子類(lèi)AverageVisitor和PowerVisitor實(shí)現(xiàn)。
功能的擴(kuò)展從在類(lèi)中添加方法的方式變成了添加新類(lèi)的方式,該類(lèi)繼承一定的Visitor接口。這是一個(gè)90度的轉(zhuǎn)換,使得架構(gòu)符合開(kāi)放封閉(OCP)原則:功能的擴(kuò)展無(wú)需改動(dòng)原有代碼。
同時(shí),這里也體現(xiàn)了單一職責(zé)原則(SRP),ICumulation層次結(jié)構(gòu)可以因?yàn)槌霈F(xiàn)了不同的算法而改變,但是不應(yīng)該因?yàn)樾枰?jì)算不同的東西(功能)而改變,算法和功能是橫向和縱向的關(guān)系。這里visitor模式隔離了算法和功能,ICumulation層次結(jié)構(gòu)負(fù)責(zé)算法,ICumulationVisitor層次結(jié)構(gòu)負(fù)責(zé)功能。
標(biāo)簽:
ICumulation
Cumulate
Visitor
模式
上傳時(shí)間:
2015-06-12
上傳用戶(hù):上善若水