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