對于開發人員來說,設計模式有時候就是一道坎,但是設計模式又非常有用,過了這道坎,它可以讓你水平提高一個檔次。而在android開發中,必要的了解一些設計模式又是必須的,因為設計模式在Android源碼中,可以說是無處不在。對于想系統的學習設計模式的同學,這里推薦一本書,《大話設計模式》。
Android常用設計模式系列:
單例模式
模板模式
適配器模式
工廠模式
代理模式
原型模式
策略模式
Build模式
觀察者模式
裝飾者模式
模板方法模式
工廠模式是非常常見的設計模式之一,寫個筆記,記錄一下我的學習過程和心得。
首先了解一些工廠模式的定義。
定義一個用于創建對象的接口,讓子類決定實例化哪個類。
由定義可以知道,涉及的角色有:
- Product(抽象產品類):要創建的復雜對象,定義對象的公共接口。
- ConcreteProduct(具體產品類):實現Product接口。
- Factory(抽象工廠類):該方法返回一個Product類型的對象。
- ConcreteFactory(具體工廠類):返回ConcreteProduct實例。
工廠方法模式屬于創建型模式。
工廠方法模式主要用來創建復雜的對象,簡單對象能夠使用new來創建就不用工廠方法模式來創建了。
下面舉個例子,說一下實現
1 創建抽象產品類,定義公共接口:
//抽象產品類
public abstract class Product {
public abstract void show();
}
2. 創建具體產品類,繼承Product類:
//具體產品類A
public class ProductA extends Product {
@Override
public void show() {
System.out.println("product A");
}
}
//具體產品類B
public class ProductB extends Product {
@Override
public void show() {
System.out.println("product B");
}
}
3 創建抽象工廠類,定義公共接口:
//抽象工廠類
public abstract class Factory {
public abstract Product create();
}
4 創建具體工廠類,繼承抽象工廠類,實現創建具體的產品:
//具體工廠類A
public class FactoryA extends Factory {
@Override
public Product create() {
return new ProductA();//創建ProductA
}
}
//具體工廠類B
public class FactoryB extends Factory {
@Override
public Product create() {
return new ProductB();//創建ProductB
}
}
5 測試方法:
public void test() {
//產品A
Factory factoryA = new FactoryA();
Product productA = factoryA.create();
productA.show();
//產品B
Factory factoryB = new FactoryB();
Product productB = factoryB.create();
productB.show();
}
廣泛應用
總結
總結一下工廠模式的優缺點
優點
符合開放封閉原則,新增產品時,只需增加相應的具體產品類和相應的工廠子類即可。
符合單一職責原則,每個具體工廠類只負責創建對應的產品。
缺點
一個具體工廠只能創建一種具體產品。
增加新產品時,還需增加相應的工廠類,系統類的個數將成對增加,增加了系統的復雜度和性能開銷。
引入的抽象類也會導致類結構的復雜化。