若是從事JAVA相關的開發,都不可避免的要用到抽象和封裝,這是JAVA的一個特色,同時也是每一個開發者必須掌握的,JAVA是這樣,Android更是如此。而設計模式就是告訴咱們應該如何寫出高效且更具應用性和拓展性的代碼,最近也是學習了幾類比較經常使用的設計模式,下面一一列舉出來,雖說的不細,可是應該知道的我會作個總結。算法
#####單例設計模式#####設計模式
單例設計模式的通常定義:一個類中只容許有一個實例。安全
實現思路:讓類的構造方法私有化,同時提供一個靜態方法去實例化這個類。ide
代碼 :學習
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; }
這是一個較爲標準的單例模式,爲了安全我給他加了鎖,然而這樣寫並非最好的寫法。單例模式有兩種寫法,懶漢寫法和餓漢寫法。spa
懶漢式:在靜態方法中初始化。時間換空間。(不推薦,時間很重要)設計
餓漢式:在聲明對象就初始化。空間換時間。(推薦,空間不是問題)code
因此,在實際開發中用的更多的是餓漢寫法,能夠對這個類加鎖,在變量聲明的時候就初始化。具體如何實現這裏我就不介紹了,能夠本身去實現。對象
#####簡單工廠設計模式#####blog
簡單工廠設計模式的通常定義:簡單工廠又叫靜態工廠,由一個工廠對象決定建立哪個產品對象。
實現思路:寫一個類,讓他製造出咱們想要的對象。
代碼:
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 () { .......... } }
好了,就先介紹那麼多,之後我會慢慢補充,但願這篇博文對你有所幫助。