編輯:關於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)外觀類沒有遵循開閉原則,當業務出現變更時,可能需要直接修改外觀類。
普通按鈕也就那麼幾種樣式,看著都審美疲勞,先放效果圖: 你會不會以為這個按鈕是集結了很多動畫的產物,我告訴你,並沒有。所有的實現都是基於自定義View,采用最底
RecylerView介紹RecylerView是support-v7包中的新組件,是一個強大的滑動組件,與經典的ListView相比,同樣擁有item回收復用的功能,這
依照郭霖老師的《第一行代碼Android》,今天我要來學習Activity,首先來初步了解Activity,基本上就是照葫蘆畫瓢的模式,有點回到當初敲java的hello
本文實例分析了Android開發之電話撥號器的用法。分享給大家供大家參考,具體如下:1、新建一個名為javacallPhone的安卓項目,並在cn.csdn.hr.act