黑馬程式員——Java中的設計模式

來源:互聯網
上載者:User

標籤:

------- android培訓、java培訓、期待與您交流! ----------

Java中有23種設計模式

按照目的來分,設計模式可以分為建立型模式、結構型模式和行為型模式。
建立型模式用來處理對象的建立過程;結構型模式用來處理類或者對象的組合;行為型模式用來對類或對象怎樣互動和怎樣分配職責進行描述。

建立型模式用來處理對象的建立過程,主要包含以下5種設計模式:
 Factory 方法模式(Factory Method Pattern)
 抽象原廠模式(Abstract Factory Pattern)
 建造者模式(Builder Pattern)
 原型模式(Prototype Pattern)
 單例模式(Singleton Pattern)

結構型模式用來處理類或者對象的組合,主要包含以下7種設計模式:
 適配器模式(Adapter Pattern)
 橋接模式(Bridge Pattern)
 組合模式(Composite Pattern)
 裝飾者模式(Decorator Pattern)
 面板模式(Facade Pattern)
 享元模式(Flyweight Pattern)
 代理模式(Proxy Pattern)

行為型模式用來對類或對象怎樣互動和怎樣分配職責進行描述,主要包含以下11種設計模式:
 責任鏈模式(Chain of Responsibility Pattern)
 命令模式(Command Pattern)
 解譯器模式(Interpreter Pattern)
 迭代器模式(Iterator Pattern)
 中介者模式(Mediator Pattern)
 備忘錄模式(Memento Pattern)
 觀察者模式(Observer Pattern)
 狀態模式(State Pattern)
 策略模式(Strategy Pattern)
 模板方法模式(Template Method Pattern)
 訪問者模式(Visitor Pattern)

 

在學習中主要學習了兩種設計模式:模板方法設計模式  和   享元設計模式  單例設計模式

 

享元設計模式(Flyweight):

 

有很多個小的對象,它們有很多的屬性相同,把它們變成一個對象,哪些不同的屬性,把它們變成方法的參數,這些不同的屬性成為外蘊狀態(External State)

那些相同的屬性成為內蘊狀態(Internal State)

 

概念:也就是說在一個系統中如果有多個相同的對象,那麼只共用一份就可以了,不必每個都去執行個體化一個對象。比如說一個文本系統,每個字母定一個對象,那麼大小寫字母一共就是52個,那麼就要定義52個對象。如果有一個1M的文本,那麼字母是何其的多,如果每個字母都定義一個對象那麼記憶體早就爆了。那麼如果要是每個字母都共用一個對象,那麼就大大節約了資源。
Flyweight模式是一個提高程式效率和效能的模式,會大大加快程式的運行速度.應用場合很多。

享元設計模式優點:減少對象數量,節省記憶體空間

享元設計模式缺點:維護共用對象,需要額外的開銷(用一個線程來維護記憶體回收)

 

模板方法設計模式:

解決的問題:當功能內部一部分實現時確定,一部分實現是不確定的。這時可以把不確定的部分暴露出去,讓子類去實現。

abstract class GetTime{

    public final void getTime(){//此功能如果不需要複寫,可加final限定

        long start = System.currentTimeMillis();

        long end = System.currentTimeMillis();

        System.out.println("毫秒是:"+(end-start));

    }

    public abstract void code(); //抽象不確定的功能,讓子類複寫實現

}

class SubDemo extends GetTime{

    public void code(){//子類複寫功能方法

        for(int y=0; y<1000; y++){

            System.out.println("y");

        }

    }

}

什麼是模版方法呢?

在定義功能時,功能的一部分是確定的,但是有一部分是不確定的,而確定的部分在使用不確定的部分,那麼這時就將不確定的部分暴露出去,由該類的子類去完成。

 

單例設計模式:

 

設計模式:解決某一類問題最有效方法

Java中有23中設計模式

 

解決的問題:保證一個類在記憶體中的對象唯一性。

比如:多程式讀取一個設定檔時,建議設定檔封裝成對象。會方便操作其中資料,又要保證多個程式讀到的是同一個設定檔對象,就需要該設定檔對象在記憶體中是唯一的。

 

Runtime()方法就是單例設計模式進行設計的。

 

如何保證對象唯一性呢?

思想:

1,不讓其他程式建立該類對象。

2,在本類中建立一個本類對象。

3,對外提供方法,讓其他程式擷取這個對象。

 

步驟:

1,因為建立對象都需要建構函式初始化,只要將本類中的建構函式私人化,其他程式就無法再建立該類對象;

2,就在類中建立一個本類的對象;

3,定義一個方法,返回該對象,讓其他程式可以通過方法就得到本類對象。(作用:可控)

 

代碼體現:

1,私人化建構函式;

2,建立私人並靜態本類對象;

3,定義公有並靜態方法,返回該對象。

---------------------------------------------

//餓漢式

class Single{

    private Single(){} //私人化建構函式。

private static Single s = new Single(); //建立私人並靜態本類對象。

    public static Single getInstance(){ //定義公有並靜態方法,返回該對象。

       return s;

    }

}

---------------------------------------------

//懶漢式:消極式載入方式。

class Single2{

    private Single2(){}

private static Single2 s = null;

    public static Single2 getInstance(){

       if(s==null)

           s = new Single2();

       return s;

    }

}

 

對於事物該怎麼描述,還怎麼描述

當需要將該事物的對象保證在記憶體中唯一時,就將以上的單例設計模式的代碼實現的三步加上即可

主函數中怎麼調用加入單例設計模式的類?

Student ss=Student.getIntance();//調用單例設計模式類對外提供的公用方法

 

餓漢式:是Single類一進入對象,就已經建立好了對象了

懶漢式:Single類進入記憶體,對象還沒有存在,只有調用了getInstance方法時,才建立對象

 

------- android培訓、java培訓、期待與您交流! ----------

 

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

黑馬程式員——Java中的設計模式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.