gof 设计模式 java_javaSE中的GOF设计模式
javaSE中的GOF設(shè)計模式
這里就javaSE中常用的設(shè)計模式進(jìn)行一個總結(jié)。
什么是設(shè)計模式?
能夠被重復(fù)利用的解決方案就是設(shè)計模式。
常用的設(shè)計模式有哪些?
常用的設(shè)計模式有GOF設(shè)計模式和javaEE設(shè)計模式。
GOF設(shè)計模式有哪些類型?
- 對象創(chuàng)建型?? 是在對象創(chuàng)建過程中的設(shè)計模式。例如:單例模式
- 結(jié)構(gòu)型 是用更多的類,更多的方法、對象組建一個更大的結(jié)構(gòu)。例如:適配器模式、裝飾器模式
- 行為型? 涉及到行為、算法的設(shè)計模式。例如:策略模式
javaSE中的GOF設(shè)計模式
- 集合中 迭代子模式、策略模式
迭代子模式:在集合中,所有collection接口以及他的子接口都實(shí)現(xiàn)了iterable接口,意味著這些類都可以進(jìn)行迭代。迭代子模式是說不需要知道底層的具體的存儲結(jié)構(gòu)和存儲細(xì)節(jié),統(tǒng)一面向Iterator接口進(jìn)行迭代。例如:HashSet底層是哈希散列表的數(shù)據(jù)結(jié)構(gòu),TreeSet底層是二叉樹的數(shù)據(jù)結(jié)構(gòu),ArrayList底層是數(shù)組,LinkedList底層是鏈表,但是他們都可以進(jìn)行迭代,就是說不需要知道底層的存儲細(xì)節(jié),統(tǒng)一面向Iterator接口進(jìn)行迭代。
策略模式:比較器互換體現(xiàn)了策略模式。在TreeSet中有兩種方案實(shí)現(xiàn)排序。方案一是,在實(shí)體類中實(shí)現(xiàn)Comparable接口,重寫compareTo方法,這種方法是一種侵入式的方法,并且每次修改比較規(guī)則時都需要對源代碼進(jìn)行修改,所以不推薦這種方法;方案二是,另外創(chuàng)建一個比較器類,實(shí)現(xiàn)Comparator接口,重寫compare方法,采用這種方法可以創(chuàng)建多個比較器,需要使用哪個比較規(guī)則就傳入哪個比較器到TreeSet中,這種比較器互換的思想正是體現(xiàn)了策略模式。
- io中 適配器模式、裝飾器模式
適配器模式:在io中有很多地方體現(xiàn)了適配器模式。它的原理是:適配器模式是有一個超級接口,超級接口上有很多個抽象方法,有一個實(shí)現(xiàn)類只需要使用某個方法,如果直接實(shí)現(xiàn)超級接口的話,就需要將所有的方法全部實(shí)現(xiàn),這種代碼是非常丑陋的;這時候超級接口和實(shí)現(xiàn)類之間加一個適配器的抽象類,由適配器的抽象類去實(shí)現(xiàn)超級接口,將所有的方法實(shí)現(xiàn)了,只將實(shí)現(xiàn)類需要使用的方法設(shè)為abstract的,由實(shí)現(xiàn)類去繼承適配器抽象類,這時候就只需要將適配器的抽象類實(shí)現(xiàn)了就可以了,這種代碼是非常優(yōu)雅的。除此之外,在servlet中也使用到了適配器設(shè)計模式,servlet的超級接口中有五個方法service、init、desotry、getServletInfo、getServletConfig,如果直接繼承servlet接口就需要將這五個方法全部實(shí)現(xiàn),而我們一般只使用service方法,所以在這里由GenericServlet實(shí)現(xiàn)servlet接口,將service以外的方法實(shí)現(xiàn)只留下service的抽象方法由我們?nèi)ブ貙?#xff0c;這就體現(xiàn)了適配器模式的思想。
裝飾器模式:io中的關(guān)閉流的時候,只需要關(guān)閉高級流,低級流就會自動被調(diào)用,這里的源代碼體現(xiàn)出了裝飾器模式。裝飾模式就是在原來的類上進(jìn)行修飾,將功能進(jìn)行擴(kuò)展。
歡迎交流 張先生 zg_199101@163.com
總結(jié)
以上是生活随笔為你收集整理的gof 设计模式 java_javaSE中的GOF设计模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 开发测试比
- 下一篇: oracle中间键配置,Oracle E