《Android源碼設計模式解析與實戰》讀書筆記(六) 《Android源碼設計模式解析與實戰》PDF資料下載php
爲建立一組相關或者是相互依賴的對象提供一個接口,而不須要指定它們的具體類。編程
一個對象族有相同的約束時可使用抽象工廠模式。 舉個例子: Android、iOS、Window Phone下都有短信軟件和撥號軟件,二者都屬於Software軟件的範疇,可是,他們所在的操做系統平臺不同,即使是同一家公司出品的軟件,其代碼的實現邏輯也是不一樣的,這時候就能夠考慮使用抽象工廠方法模式來產生Android、iOS、Window Phone下的短信軟件和撥號軟件。設計模式
public abstract class CarFactory {
/**
* 生產輪胎
* @return
*/
public abstract ITire createTire();
/**
* 生產發動機
* @return
*/
public abstract IEngine createEngine();
/**
* 生產製動系統
* @return
*/
public abstract IBrake createBrake();
}
複製代碼
爲每一種零部件產品定義一個接口bash
public interface ITire {
/**
* 輪胎
*/
void tire();
}
複製代碼
public class NormalTire implements ITire {
@Override
public void tire() {
System.out.println("普通輪胎");
}
}
複製代碼
public class SUVTire implements ITire {
@Override
public void tire() {
System.out.println("越野輪胎");
}
}
複製代碼
public interface IEngine {
/**
* 發動機
*/
void engine();
}
複製代碼
public class DomesticEngine implements IEngine {
@Override
public void engine() {
System.out.println("國產發動機");
}
}
複製代碼
public class ImportEngine implements IEngine {
@Override
public void engine() {
System.out.println("進口發動機");
}
}
複製代碼
public interface IBrake {
/**
* 制動系統
*/
void brake();
}
複製代碼
public class NormalBrake implements IBrake {
@Override
public void brake() {
System.out.println("普通制動");
}
}
複製代碼
public class SeniorBrake implements IBrake {
@Override
public void brake() {
System.out.println("高級制動");
}
}
複製代碼
//Q3工廠類
public class Q3Factory extends CarFactory {
@Override
public ITire createTire() {
return new NormalTire();
}
@Override
public IEngine createEngine() {
return new DomesticEngine();
}
@Override
public IBrake createBrake() {
return new NormalBrake();
}
}
複製代碼
//Q7工廠類
public class Q7Factory extends CarFactory {
@Override
public ITire createTire() {
return new SUVTire();
}
@Override
public IEngine createEngine() {
return new ImportEngine();
}
@Override
public IBrake createBrake() {
return new SeniorBrake();
}
}
複製代碼
//構造一個生產Q3的工廠
CarFactory factoryQ3 = new Q3Factory();
factoryQ3.createTire().tire();
factoryQ3.createEngine().engine();
factoryQ3.createBrake().brake();
System.out.println("-----------------------------------------------------");
CarFactory factoryQ7 = new Q7Factory();
factoryQ7.createTire().tire();
factoryQ7.createEngine().engine();
factoryQ7.createBrake().brake();
複製代碼
輸出以下:微信