如果從事JAVA相關的開發,都不可避免的要用到抽象和封裝,這是JAVA的一個特點,同時也是每個開發者必須掌握的,JAVA是這樣,Android更是如此。而設計模式就是告訴我們應該如何寫出高效且更具應用性和拓展性的代碼,最近也是學習了幾類比較常用的設計模式,下面一一列舉出來,雖然說的不細,但是應該知道的我會做個總結。
#####單例設計模式#####
單例設計模式的一般定義:一個類中只允許有一個實例。
實現思路:讓類的構造方法私有化,同時提供一個靜態方法去實例化這個類。
代碼 :
static class SingleTon { private static SingleTon instance; private SingleTon(){}; public static SingleTon newInstance() { if(instance==null) { synchronized (SingleTon.class) { if(instance==null) { ins和tance=new SingleTon(); } } } return instance; }
這是一個較為標准的單例模式,為了安全我給他加了鎖,然而這樣寫並不是最好的寫法。單例模式有兩種寫法,懶漢寫法和餓漢寫法。
懶漢式:在靜態方法中初始化。時間換空間。(不推薦,時間很重要)
餓漢式:在聲明對象就初始化。空間換時間。(推薦,空間不是問題)
所以,在實際開發中用的更多的是餓漢寫法,可以對這個類加鎖,在變量聲明的時候就初始化。具體如何實現這里我就不介紹了,可以自己去實現。
#####簡單工廠設計模式#####
簡單工廠設計模式的一般定義:簡單工廠又叫靜態工廠,由一個工廠對象決定創建哪一個產品對象。
實現思路:寫一個類,讓他制造出我們想要的對象。
代碼:
public class 學生工廠 { public static 學生 getStudent(int type) { switch (type) { case 學生類型.學神: return new 學神(); case 學生類型.學霸: return new 學霸(); case 學生類型.學弱: return new 學弱(); case 學生類型.學渣: return new 學渣(); default: break; } return null; } }
通過這個工廠,我們可以很方便的生產出我們想要的對象。這里我用偽代碼表示,為了更加形象,實際中這樣的寫法是絕對不允許的!
#####適配器設計模式#####
適配器模式的一般定義:某類繼承這個適配器,從而實現我們需要實現的方法。
實現思路:通過寫一個適配器類,里面寫了所有的抽象方法,但是這些方法是空的,並且適配器類要定義成抽象的,如果適配器類可以自己實現就沒有意義了。適配器的作用,繼承適配器,重新需要重新的方法就可以了,簡化操作。
代碼:
public class Adapter { public static void main(String[] args) { 阿樂 a=new 阿樂(); a.啪啪啪(); } interface 談戀愛 { void 吃飯(); void 看電影(); void 逛街(); void 啪啪啪(); } abstract class 戀愛中的妹子 implements 談戀愛{ @Override public void 吃飯() { // TODO Auto-generated method stub } @Override public void 看電影() { // TODO Auto-generated method stub } @Override public void 逛街() { // TODO Auto-generated method stub } @Override public void 啪啪啪() { // TODO Auto-generated method stub } } class 阿樂 extends 戀愛中的妹子{ public void 啪啪啪() { // TODO Auto-generated method stub System.out.println("阿樂:亞美爹,好害羞"); } } }
這里我寫了一個接口,接口中定義了幾個方法,當某類實現這個接口的時候就需要實現這些方法。用時適配器不允許自己實現這些方法,需要交給他的子類去繼承,讓子類選擇需要實現什么代碼,Android中的Adapter就是用了適配器模式。
#####模板設計模式#####
模板設計模式的一般定義:定義一個算法骨架將具體實現交給子類去實現。
實現方法:在類中定義一個抽象方法,距離實現交由子類去實現
代碼:
public class A { public final void run { ........ void howRun(); ........ } public abstract void howRun(); } public class B extends A { public void howRun () { .......... } }
好了,就先介紹那么多,以后我會慢慢補充,希望這篇博文對你有所幫助。