門面模式(Facade Pattern)
由於客戶端需要調用多個系統才能完成一件業務操作,所以客戶端需要感知多個子系統,並依賴這些子系統。門面(Facade)的作用就是聚合這些子系統,由門面對外提供接口,客戶端只需要感知和依賴門面即可,無需再依賴其他子系統。
門面模式的設計和實現都很簡單,這裏可以下載門面模式的Java實現版本。
門面模式的UML類圖如下:
享元模式(Flyweight Pattern)
享元模式是對象結構模式,它以共享的方式高效的支持大量的細粒度對象。java.lang.String類就使用了享元模式,java.lang.String對象是不可變對象,一旦創建,將不會被修改,如果需要修改,那麼會返回另外一個對象。但在JVM內部,使用了一個共享變量池共享java.lang.String對象,即在JVM內部,java.lang.String對象是共享的。享元模式分爲單純享元模式和複合享元模式。在單純享元模式中,所有對象都是可以被共享的。複合享元模式即在單純享元模式內部又是有合成模式加以複合,形成複合享元對象。以下是Java版本的上述兩種模式實現的代碼下載。
單純享元模式的UML類設計圖如下:
複合享元模式的UML類設計圖如下:
原型模式(Prototype Pattern)
原型模式是對象的創建模式,該模式能夠通過負責原型對象的方式,創建出更多同類型的對象。Java語言直接支持構建模式,java.lang.Object類裏面已經定義了clone()方法,通過該方法,可以copy出一個與當前對象一模一樣的新對象。需要使用該特性的對象,繼承標識接口Cloneable即可。涉及到clone方法,有太多的需要主要的地方,例如淺拷貝和深拷貝的問題,在本例的實現中,深拷貝是使用對象序列化的方式來實現的,而不是使用傳統的遞歸調用clone方法的方式。
原型模式的Java代碼實現可以在這裏下載。
原型模式的UML類圖如下:
單例模式(Singleton Pattern)
單例模式是對象的構建模式,單例模式確保全局(整個JVM)只有一個該對象的實例。總體來說,單例模式的實現非常簡單,大致可以分爲餓漢式和懶漢式。但這兩種實現方式都有各種的問題,另外一種通過內部類持有對象實例的方式,將上述兩種實現的缺點都規避掉了。
單例模式的三種實現方式Java版本下載到這裏。
餓漢式單例模式UML類圖:
懶漢式單例模式UML類圖:
內部類持有對象實例的方法UML類圖:
策略模式(Strategy Pattern)
策略模式是對象的行爲模式,它將一組不同的算法封裝在相同接口的後面,從而使它們可以互相的替換。策略模式可以使算法在不影響客戶端的情況下進行變化。
策略模式的代碼實現在這裏可以下載。
策略模式的UML類設計圖:
模板方法模式(Template Method Pattern)
模板方法模式是對象的行爲模式,其定義了算法的流程,但將算法中某些步驟的具體實現較給子類來決定,不同的子類可以以不同的方式實現。
模板方法模式的代碼實現在這裏可以下載。
模板方法模式的UML類設計圖: