安卓設計模式的理解

一:工廠模式:
1.依賴注入的方式:
新建一個抽象類,裏邊有創建具體類的抽象方法,還有個方法,類的行爲直接使用
public abstract class DataManage {
protected abstract SaveDataApi createSaveType();

public void ToSave(String data) {
    createSaveType().save(data);
}

}

新建類,繼承它,實現創建的方法

———————————–例子——————————————————–
抽象的工廠方法:
public abstract class BaseDataManage {
protected abstract SaveDataApi createSaveType();

public SaveDataApi api;

public void ToSave(String data) {
    createSaveType().save(data);
}

}


二:面向對象的理解:
1.一個對象把可變化的和不可變化的區分開來,不可變化的可以寫具體的實現方法,可變化的行爲抽取未接口,哪些具體可變化的去實現這個接口,有多少種可變化的行爲都實現這個接口
2.這個對象命名爲抽象的類,接口作爲變量,可變化的也寫出方法,用接口實現它的行爲,子類必須實現的行爲也作爲一個抽象方法,這樣可變化和不可變化的行爲都有了
3.當實現一個具體的對象時,就繼承哪個抽象的對象的類,在它的超類裏new 出可變化的具體行爲,但是變量是接口,變量會賦值給它的父類的
4.用法:new 出具體的對象,變量是接口,然後點出具體的行爲


三.橋接模式:
例子:
發消息的方式:Email 手機短消息 站內短消息
發消息的類型:普通消息 加急消息 特急消息

組成了兩個維度,橫座標縱座標自由組合

橋接模式:
1.定義消息的接口:
public interface MessageImplementor {
public void send(String message,String toUser);

}

2.定義抽象部分的接口:
public abstract class AbstractMessage {
protected MessageImplementor impl;//持有一個實現部分的對象
public AbstractMessage(MessageImplementor impl){//構造方法
this.impl = impl;
}
public void sendMessage(String message,String toUser){//發送消息,轉調實現部分的方法
this.impl.send(message, toUser);
}

}

實現具體的實現:發消息的方式:Email 手機短消息 站內短消息

1.以站內短消息的方式發送消息:
public class MessageSMS implements MessageImplementor{
public void send(String message, String toUser) {
System.out.println(“使用站內短消息的方式,發送消息’”+message+”’給”+toUser);
}

}

2.Email方式的實現:
public class MessageEmail implements MessageImplementor{
public void send(String message, String toUser) {
System.out.println(“使用Email的方式,發送消息’”+message+”’給”+toUser);
}
}
3.手機方式的實現:
public class MessageMobile implements MessageImplementor{
public void send(String message, String toUser) {
System.out.println(“使用手機短消息的方式,發送消息’”
+message+”’給”+toUser);
}

}

擴展抽象的消息接口,普通消息 加急消息 特急消息

普通消息:
public class CommonMessage extends AbstractMessage{//普通消息
public CommonMessage(MessageImplementor impl) {
super(impl);
}
public void sendMessage(String message, String toUser) {
//對於普通消息,什麼都不幹,直接調父類的方法,把消息發送出去就可以了
super.sendMessage(message, toUser);
}
}


加急消息:
public class UrgencyMessage extends AbstractMessage{
public UrgencyMessage(MessageImplementor impl) {
super(impl);
}
public void sendMessage(String message, String toUser) {
message = “加急:”+message;
super.sendMessage(message, toUser);
}
//擴展自己的新功能:監控某消息的處理過程
// messageId 被監控的消息的編號
//包含監控到的數據對象,這裏示意一下,所以用了Object
public Object watch(String messageId) {
//獲取相應的數據,組織成監控的數據對象,然後返回
return null;
}

}

特急消息:
public class SpecialUrgencyMessage extends AbstractMessage{
public SpecialUrgencyMessage(MessageImplementor impl) {
super(impl);
}
public void hurry(String messageId) {//添加功能,催促
//執行催促的業務,發出催促的信息
}
public void sendMessage(String message, String toUser) {
message = “特急:”+message;
super.sendMessage(message, toUser);
//還需要增加一條待催促的信息
}
}
—————————————————–用法———————
//創建具體的實現對象
MessageImplementor impl = new MessageSMS();
//創建一個普通消息對象
AbstractMessage m = new CommonMessage(impl);
m.sendMessage(“請喝一杯茶”, “小李”);
//創建一個緊急消息對象
m = new UrgencyMessage(impl);
m.sendMessage(“請喝一杯茶”, “小李”);
http://chjavach.javaeye.com 1.17 研磨設計模式之橋接模式-2
第 108 / 127 頁
//創建一個特急消息對象
m = new SpecialUrgencyMessage(impl);
m.sendMessage(“請喝一杯茶”, “小李”);
//把實現方式切換成手機短消息,然後再實現一遍
impl = new MessageMobile();
m = new CommonMessage(impl);
m.sendMessage(“請喝一杯茶”, “小李”);
m = new UrgencyMessage(impl);
m.sendMessage(“請喝一杯茶”, “小李”);
m = new SpecialUrgencyMessage(impl);
m.sendMessage(“請喝一杯茶”, “小李”);


四.生成器模式:
生成器模式理解:實現同樣的構建過程,創建不同的表現。
思路:
1.指導者:先把構建過程獨立出來,在生成模式中把它稱爲指導者,由它指導裝配過程,但是不負責每步具體的實現
2.生成器:能具體實現每步的對象,生成器是可以被切換的具體提現

例子:
輸出數據,格式是xml和txt,都是有文件頭,數據內容,文件尾的格式
1.定義接口:
public interface Builder{
//文件頭的部分
public void buildHeader(ExportHeaderMode ehm);
//構建輸出文件的數據的內容
public void buildBody(Map

認識這點很重要,因爲在生成器模式中,強調的是固定整體構建的算法,而靈活開展和切換部件的具體構造和產品裝配的方式,所以要嚴格區分這兩部分

使用生成器模式構建複雜對象,先不考慮帶約束

例子:
public class InsuranceConteract{
private String contractId;
private String personName;
InsuranceConteract(ConcreteBuilder builder){
this.contractId=builder.getContractId();
this.personNam=builder.getPersonName();
}
//保險合同的某些操作
puublic void someOperation(){
//這裏寫邏輯操作
}
}


構造保險合同對象的構造器
public class ConcreteBuilder{
private String contractId;
priavte String personName;
//構造方法,傳入必須要有的參數
public ConcreteBuilder(String contractId){
this.contractId=contractId;
}
//選填數據,被保險人員的名稱
public ConcreteBuilder setPersonName(String personName){
this.personName=personName;
return this;
}
//構建真正的對象並返回
public InsuranceContract build(){
return new InsuranceContract(this);
}

//提供getter方法供外部訪問,請注意是沒有提供setter方法的
pubilc String getContrtactId(){
return contractId;
}

pubilc String getPersonName(){
return personName;
}
}

//——————–使用方法———————————
ConcreteBuilder builder=new ConcreteBuilder(“001”);
//設置需要的數據,然後構建保險合同對象
InsuranceContract contract=new builder.setPersonName(“張三”).build();
//操作保險合同對象的方法
contract.someOperation();

五.外觀模式:
有多個模塊,每個模塊都負責各自的功能,客戶端不需要知道每個模塊的實現細節,把需要用的模塊組合封裝在Facade裏就可以了,通常結合單例模式,客戶端需要使用時,直接調用
Facade裏的方法即可

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章