標籤:
------- 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中的設計模式