[TOC]java
工廠模式,比較經常使用,屬於建立型模式,也就是主要是用來建立對象的。工廠模式,有三種,主要分爲:設計模式
其中,本文要講的就是,簡單工廠模式,可是簡單工廠模式,並非屬於GoF
講的23種設計模式中。簡單工廠模式,也叫靜態工廠方法模式。簡單而言,就是有一個具體的工廠類,用來生產不一樣類型的對象,而這些對象,都有類似的特色,它們都實現同一個接口。markdown
何時應該使用工廠模式?爲何須要工廠模式呢?app
工廠模式主要是用來生成不一樣的對象,也就是屏蔽了對象生成的時候的複雜性,使用的時候不須要知道對象是怎麼生成的,而只須要關注要生成什麼對象。若是構造一個對象特別的費勁,而咱們又常常須要構造生成這個對象,那麼使用工廠模式是比較有利的。咱們都知道,設計模式主要就是爲了設計出更加簡潔,易懂,方便維護,方便拓展的代碼。測試
若是一個很複雜的對象,要在多個地方構建,那麼要是改動一次,咱們就須要找出全部引用的地方,逐一修改,那會很麻煩。ui
簡單工廠模式主要有三種角色:設計
假設如今有一個果園,用來種植各類水果,可是每一種水果種植的方式又不同。首先,先定義一個接口Fruit
:code
public interface Fruit { public void process(); }
定義三種水果Apple
,Pear
,Orange
:對象
public class Apple implements Fruit{ public void process() { System.out.println("I am an Apple"); } }
public class Pear implements Fruit{ public void process() { System.out.println("I am a Pear"); } }
public class Orange implements Fruit{ public void process() { System.out.println("I am an Orange"); } }
建立一個工廠類:blog
public class FruitFactory { public static Fruit getFruit(String name) { if ("Apple".equalsIgnoreCase(name)) { return new Apple(); } else if ("Pear".equalsIgnoreCase(name)) { return new Pear(); } else if ("Orange".equalsIgnoreCase(name)) { return new Orange(); } return null; } }
測試代碼以下:
public class FruitTest { public static void main(String[] args) { Fruit apple = FruitFactory.getFruit("Apple"); apple.process(); Fruit pear = FruitFactory.getFruit("Pear"); pear.process(); Fruit orange = FruitFactory.getFruit("Orange"); orange.process(); } }
測試結果以下:
<img src="https://markdownpicture.oss-cn-qingdao.aliyuncs.com/blog/image-20201218231609645.png" alt="image-20201218231609645" style="zoom:50%;" />
這樣的寫法,若是後續再來了一種水果,那麼只須要實現接口,同時在工廠中增長一個case
便可。
優勢:
凡事都有優劣,簡單工廠方法的缺點在於:
從以上的優劣,咱們能夠知道,其實若是產品建立過程比較複雜,並且個數很少,都是依靠某些參數來建立的話,抽象出簡單工廠模式,實際上是比較有利的一種作法。