簡介
簡單工廠模式(Simple Factory Pattern)屬於類的創新型模式,由於工廠類的方法大多數是靜態的,又叫靜態工廠方法模式(Static FactoryMethod Pattern),它通過專門定義一個類來負責創建其他類的實例,被創建的實例通常都具有共同的父類。
代碼實現
1 首先創建一個接口 (car) 有一個 跑的功能
package com.guxiang.factory.simplefactory;
public interface Car {
void run();
}
2 寶馬和奔馳兩輛豪車分別實現了這個car接口
public class BWM implements Car{
public void run() {
System.out.println("寶馬在路上飛奔");
}
}
public class Benz implements Car {
public void run() {
System.out.println("奔馳在路上飛奔");
}
}
如果是不使用工廠設計模式,那麼代碼很簡單
public class NoFactory {
public static void main(String[] args) {
Car c1 = new Benz();
Car c2 = new BWM();
c1.run();
c2.run();
}
}
相應的uml類圖如下
如圖,我們可以看見 它雖然代碼相對簡潔 但是卻與3個類發生了關係 如果產品種類加多 那麼就會與更多類發生關係 ,違法了 迪米特法則
下面介紹使用簡單工廠設計模式的方法
簡單工廠有兩種方式實現
第一種
public class CarFactory {
public static Car createCar( String type) {
if ("寶馬".equals(type)) {
return new BWM();
}else if ("奔馳".equals(type)) {
return new Benz();
}else {
return null;
}
}
}
第二種
public class CarFactory2 {
public static Car createBenz() {
return new Benz();
}
public static Car createBWM() {
return new BWM();
}
}
第一種的調用方式如下
public class HaveFactory {
public static void main(String[] args) {
Car car1 = CarFactory.createCar("奔馳");
Car car2 = CarFactory.createCar("寶馬");
car1.run();
car2.run();
}
}
第二種的調用方式如下
public class HaveFactory {
public static void main(String[] args) {
Car car1 = CarFactory2.createBenz();
Car car2 = CarFactory2.createBWM();
car1.run();
car2.run();
}
}
他們的UML類圖實現如下
可以發現,使用簡單工廠,那麼無論生產多少種類的汽車 我們都僅僅只需要和兩個類發生關係。這樣更難體現面向對象的好處。