Android設計模式--面板模式
問題:在Android中,Apk可以有,QQ為代表的外掛程式式安裝更新功能;
那麼問題來了,主系統(姑且這麼說)調用外掛程式式安裝的子系統,由子系統提供對外的訪問,屬不屬於一種面板模式呢?
先說設計模式:
1、定義:
為子系統中的一組介面提供一個統一介面;
Facade模式定義了一個高層介面,這個介面使得這子系統更容易使用。
2、目的:
降低對子系統的複雜度和依賴。這使得子系統更便於使用和管理。
提高代碼的品質,代碼維護性,擴充性。
3、設計:
在設計之初,就要有意識的將兩個不同的層面分離,層與層之間建立外觀的Facade,
增加一個Facade可以提供一個簡單的介面減少他們之間的依賴。
這我們在Android編程的時候,可以有意識的將資料訪問和商務邏輯層嚴格分離開來,使得設計更加的低耦合。
尤其是對子系統的維護上,子系統越來越大時,面板模式尤為重要!
4、簡單的demo:
首先是子系統:
package com.example.demo.Facade;/** * 子系統設計 * @author qubian * @data 2015年6月9日 * @email naibbian@163.com * */public abstract class Lottery {protected abstract String getLotteryName() ;protected abstract String getLotteryNum() ;protected abstract String getRandomNum() ;}package com.example.demo.Facade;public class SSQLottery extends Lottery{@Overrideprotected String getLotteryName() {return "SSQ";}@Overrideprotected String getLotteryNum() {return "3";}@Overrideprotected String getRandomNum() {return "6";}}package com.example.demo.Facade;public class DLTLottery extends Lottery{@Overrideprotected String getLotteryName() {return "DLT";}@Overrideprotected String getLotteryNum() {return "1";}@Overrideprotected String getRandomNum() {return "7";}}
然後是Facade以及使用:
package com.example.demo.Facade;/** * 面板模式 * 統一對外訪問 * @author qubian * @data 2015年6月9日 * @email naibbian@163.com * */public class Facade {SSQLottery ssq;public String getLotteryName(String name){if (name.equalsIgnoreCase("SSQ")) {ssq = new SSQLottery();}return ssq.getLotteryName();}}package com.example.demo.Facade;import android.util.Log;public class UseFacade {public void use(){Facade facade = new Facade();Log.i("TAG", facade.getLotteryName("SSQ"));}}
demo 寫的好像太簡單了,不過,面板模式確實也算是用的比較多的,而且比較簡單的模式;
按照我的理解;
從某種意義上來說,將外掛程式式安裝理解成一種面板模式,似乎顯得跟簡單,定義太淺顯了一些,
外掛程式式的安裝目的是為了啟動子系統,除了喚起子系統以外,卻很少會由主系統調用到子系統內部的方法,當然也不排除有這樣的情況,
若有則不太符合外掛程式式安裝與更新的目的;所以確實有些無解了。
問題先留在此處了。