[TOC]
1.簡單工廠模式介紹
工廠模式,比較常用,屬于創(chuàng)建型模式,也就是主要是用來創(chuàng)建對象的。工廠模式,有三種,主要分為:
- 簡單工廠模式
- 工廠方法模式
- 抽象工廠模式
其中,本文要講的就是,簡單工廠模式,但是簡單工廠模式,并不是屬于GoF講的23種設(shè)計(jì)模式中。簡單工廠模式,也叫靜態(tài)工廠方法模式。簡單而言,就是有一個(gè)具體的工廠類,用來生產(chǎn)不同類型的對象,而這些對象,都有相似的特點(diǎn),它們都實(shí)現(xiàn)同一個(gè)接口。
什么時(shí)候應(yīng)該使用工廠模式?為什么需要工廠模式呢?
工廠模式主要是用來生成不同的對象,也就是屏蔽了對象生成的時(shí)候的復(fù)雜性,使用的時(shí)候不需要知道對象是怎么生成的,而只需要關(guān)注要生成什么對象。如果構(gòu)造一個(gè)對象特別的費(fèi)勁,而我們又經(jīng)常需要構(gòu)造生成這個(gè)對象,那么使用工廠模式是比較有利的。我們都知道,設(shè)計(jì)模式主要就是為了設(shè)計(jì)出更加簡潔,易懂,方便維護(hù),方便拓展的代碼。
如果一個(gè)很復(fù)雜的對象,要在多個(gè)地方構(gòu)建,那么要是改動(dòng)一次,我們就需要找出所有引用的地方,逐一修改,那會很麻煩。
簡單工廠模式主要有三種角色:
- 簡單工廠:負(fù)責(zé)創(chuàng)建所有的實(shí)例,依照不同的類型創(chuàng)建不同的對象,也就是產(chǎn)品。
- 抽象產(chǎn)品接口:也就是所有產(chǎn)品的一個(gè)抽象,一般是所有產(chǎn)品都需要實(shí)現(xiàn)的接口。
- 具體產(chǎn)品:實(shí)現(xiàn)抽象產(chǎn)品接口,不同的產(chǎn)品做不一樣的實(shí)現(xiàn)。
2.簡單工廠模式舉例
假設(shè)現(xiàn)在有一個(gè)果園,用來種植各種水果,但是每一種水果種植的方式又不一樣。首先,先定義一個(gè)接口Fruit:
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");
}
}
創(chuàng)建一個(gè)工廠類:
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();
}
}
測試結(jié)果如下:
<img src="https://markdownpicture.oss-cn-qingdao.aliyuncs.com/blog/image-20201218231609645.png" alt="image-20201218231609645" style="zoom:50%;" />
這樣的寫法,如果后續(xù)再來了一種水果,那么只需要實(shí)現(xiàn)接口,同時(shí)在工廠中增加一個(gè)case即可。
3.簡單工廠模式的優(yōu)劣
優(yōu)點(diǎn):
- 產(chǎn)品和工廠的職責(zé)比較分明,工廠負(fù)責(zé)創(chuàng)建,產(chǎn)品負(fù)責(zé)自己的實(shí)現(xiàn)
- 產(chǎn)生/構(gòu)建產(chǎn)品比較簡單,不需要關(guān)注內(nèi)部細(xì)節(jié),只需要知道自己想要哪一種。
- 增加或者修改產(chǎn)品比較簡單,解耦合。
凡事都有優(yōu)劣,簡單工廠方法的缺點(diǎn)在于:
- 工廠類的重要性很高,一旦出現(xiàn)問題,影響所有的產(chǎn)品。
- 產(chǎn)品數(shù)量一旦特別多的時(shí)候,工廠內(nèi)部邏輯會比較復(fù)雜,不利于理解和維護(hù)。
- 靜態(tài)方法不利于繼承和實(shí)現(xiàn)。
從以上的優(yōu)劣,我們可以知道,其實(shí)如果產(chǎn)品創(chuàng)建過程比較復(fù)雜,而且個(gè)數(shù)不多,都是依靠某些參數(shù)來創(chuàng)建的話,抽象出簡單工廠模式,其實(shí)是比較有利的一種做法。
【作者簡介】:
秦懷,公眾號【秦懷雜貨店】作者,技術(shù)之路不在一時(shí),山高水長,縱使緩慢,馳而不息。求個(gè) 贊 和 在看 ,對我,是莫大的鼓勵(lì)和認(rèn)可,讓我更有動(dòng)力持續(xù)寫出好文章。