版權宣告:本文為 Codeagles 原創文章,可以隨意轉載,但必須在明確位置註明出處!!!
###工廠模式 工廠模式(Factory Pattern)是 Java 中最常用的設計模式之一。看到這個名字不難想象到我們要做什麼,當然就是創造工廠,那麼工廠是幹什麼的?當然是生產創造用的了,生產什麼呢?JAVA中一切萬物皆物件,工廠用來生產物件。 工廠模式通常分為:
- 簡單工廠模式
- 工廠方法模式
- 抽象工廠模式
想要用工廠模式,那就要知道這麼幾個問題:
- 為什麼要用
- 有什麼好處
- 有什麼壞處
- 怎麼用
OK,其他的細枝末節先不深入,先搞懂這幾個問題就好了,深入的隨著理解和實踐,認知也會越來越深入的。 首先,為什麼要用? 我們知道設計模式無疑就是通過經驗來總結出比較合理的程式碼結構,目的也很明確,掛在嘴邊的高內聚、低耦合,設計模式為了解耦,程式碼更合理。 有什麼好處呢?
- 擴充套件性高
- 讓呼叫者只用介面,而不去注重內部實現
- 當然最好的就是,呼叫者只需要知道物件名字就可以,不需要關注怎麼建立。(建立由子類進行)
有什麼壞處呢? 相對也是顯而易見的,每次增加一個需求或者說產品,都要對應增加一個物件工廠以及例項類,如果系統很大,那麼類個數是巨多的,無疑維護成本提升了。 那麼,最後一個問題怎麼用? ####Talk is cheap, show me the code. ####簡單工廠
package design;
//抽象機器
abstract class Mechine {
public abstract void move();
public abstract void stop();
}
// 抽象機器例項——汽車
class Car extends Mechine {
@Override
public void move() {
System.out.println("汽車正以80邁速度駛過來。。。");
}
@Override
public void stop() {
System.out.println("一腳急剎車,滑行20米停下來了。。");
}
}
// 抽象機器例項——飛機
class Airplane extends Mechine {
@Override
public void move() {
System.out.println("飛機正在起飛。。。");
}
@Override
public void stop() {
System.out.println("飛機準備降落。。。");
}
}
複製程式碼
//簡單工廠
public class MechineFactory {
public static Mechine createMechine(String mechineName) {
Mechine mechine = null;
if(mechineName.equals("car")){
mechine= new Car();
}
if(mechineName.equals("airplane")){
mechine= new Airplane();
}
return mechine;
}
}
複製程式碼
public class Boss {
public static void main(String[] args) {
// Boss下令“我要造一輛轎車,現在馬上!會動的!”
// 機器工廠接到指令,立即開始做ing。。。
Mechine mechine = MechineFactory.createMechine("car");
mechine.move();
//Boss:"我好幾個億的生產線不能這麼放著,造一輛飛機,會飛會降落的"
mechine = MechineFactory.createMechine("airplane");
mechine.move();
mechine.stop();
}
}
複製程式碼
這就是簡單工廠,那麼工廠方法模式,其實是簡單工廠的擴充套件,說白了就是簡單工廠抽象化。 ####工廠方法模式
package design;
//抽象機器
abstract class Mechine {
public abstract void move();
public abstract void stop();
}
// 抽象機器例項——汽車
class Car extends Mechine {
@Override
public void move() {
System.out.println("汽車正以80邁速度駛過來。。。");
}
@Override
public void stop() {
System.out.println("一腳急剎車,滑行20米停下來了。。");
}
}
// 抽象機器例項——飛機
class Airplane extends Mechine {
@Override
public void move() {
System.out.println("飛機正在起飛。。。");
}
@Override
public void stop() {
System.out.println("飛機準備降落。。。");
}
}
複製程式碼
//簡單工廠抽象化
abstract class MechineFactory {
public abstract Mechine createMechine(String mechineName);
}
//汽車工廠--只負責建立汽車
public class CarFactory extends MechineFactory{
@Override
public Mechine createMechine(String mechineName) {
return new Car();
}
}
public class Boss {
public static void main(String[] args) {
// Boss下令“我要造一輛轎車,現在馬上!會動的!”
// 機器工廠接到指令,立即開始做
MechineFactory mf = new CarFactory();
Mechine m=mf.createMechine("car");
m.move();
}
}
複製程式碼
show完code是不是有點概念了,當然模式只是模式,還有很多種寫法,只要是這種思想就可以,比如還可用介面_implement_來寫,那樣更好理解,這裡給出這種寫法,也是自己想鍛鍊一下。 ###總結 這裡只講了前兩種,至於抽象工廠,後續更新。簡單工廠和工廠方法區別在於,一個用工廠建立物件,一個用工廠建立單一產品工廠在建立物件。 ###參考 工廠方法