編輯:關於android開發
外觀模式是結構型設計模式之一,它在開發中的運用頻率非常高,是我們封裝API的常用手段。我們經常使用的三方SDK基本都使用的外觀模式,這樣可以對用戶屏蔽很多實現細節,降低用戶使用成本。
要求一個子系統的外部與其內部的通信必須通過一個統一的對象進行。外觀模式提供一個高層次的接口,使得子系統更易於使用。
(1)為復雜子系統提供一個簡單接口,對外隱藏子系統的具體實現、隔離變化。
(2)當你需要構建一個層次結構的子系統時,使用外觀模式定義子系統中每層的入口點。如果子系統之間是相互依賴的,你可以讓它們僅通過外觀接口進行通信,從而簡化了它們之間的依賴關系。
(1)Facade
:系統對外的統一接口,系統內部系統地工作。
(2)其他分支
:子系統接口。
可以看出外觀模式結構很簡單,但是如果沒有封裝,那麼用戶就要操作幾個子系統的交互邏輯,容易出現錯誤。
手機集合了電話功能、短信功能、拍照和GPS等功能。那麼以手機為例,簡單的用外觀模式實現一下。
Phone接口與PhoneImpl:
public interface Phone {
//撥電話
public void dail();
//掛斷
public void hangup();
}
public class PhoneImpl implements Phone{
@Override
public void dail() {
System.out.println("打電話");
}
@Override
public void hangup() {
System.out.println("掛斷");
}
}
Camera接口與Camera的實現類:
public interface Camera {
//打開相機
public void open();
//拍照
public void takePicture();
//關閉相機
public void close();
}
public class SamsungCamera implements Camera{
@Override
public void open() {
System.out.println("打開相機");
}
@Override
public void takePicture() {
System.out.println("拍照");
}
@Override
public void close() {
System.out.println("關閉相機");
}
}
外觀類MobilePhone:
public class MobilePhone {
private Phone mPhone = new PhoneImpl();
private Camera mCamera = new SamsungCamera();
public void dail(){
mPhone.dail();
}
public void hangup() {
mPhone.hangup();
}
public void takePicture() {
mCamera.open();
mCamera.takePicture();
}
public void closeCamera() {
mCamera.close();
}
public void videoChat(){
System.out.println("--> 視頻聊天接通中");
mCamera.open();
mPhone.dail();
}
}
調用:
public class Client {
public static void main(String[] args) {
MobilePhone mobilePhone = new MobilePhone();
//拍照
mobilePhone.takePicture();
//視頻聊天
mobilePhone.videoChat();
}
}
結果:
打開相機
拍照
--> 視頻聊天接通中
打開相機
打電話
Context
是一個抽象類,它的真正實現是ContextImpl
類,通過查看ContextImpl
源碼我們可以看到ContextImpl
內部封裝了很多不同子系統的操作。例如:Activity的跳轉、發送廣播、啟動服務和設置壁紙等,這些工作不是在ContextImpl
中實現,而是交給了具體的子系統進行處理。通過Context
這個抽象類定義了一組接口,ContextImpl
實現。這樣用戶通常情況下就不需要對每個子系統進行了解。這樣對用戶屏蔽了具體的實現細節,降低了使用成本。
(1)對客戶程序隱藏子系統的細節,因而減少了客戶對於子系統的耦合,能夠擁抱變化。
(2)外觀類對子系統的接口封裝,使得系統更易於使用。
(1)外觀類接口膨脹。由於子系統的接口都有外觀類統一對外暴露,使得外觀類的API接口較多,在一定程度上增加了用戶使用成本。
(2)外觀類沒有遵循開閉原則,當業務出現變更時,可能需要直接修改外觀類。
Android React Native使用原生UI組件 Android React Native 已經將幾個常用的原生組件進行了封裝,比如 ScrollView 和
Android統計圖表MPAndroidChart.,mpandroidchartAndroid統計圖表MPAndroidChart MPAndroidChart是在An
Activity你需要知道的一切 最近想寫篇關於Activity啟動過程源碼分析的博客,在此之前先總結下Android中Activity必須要知道的一些基礎知識,以方便後
深入理解Activity啟動流程 深入理解Activity啟動流程(一)–Activity啟動相關類的類圖 Activity啟動時的概要交互
The Genymotion Virtual device could