簡單工廠模式是類的創建模式,又叫做靜態工廠方法(Static Factory Method)模式。簡單工廠模式是由一個工廠對象決定創建出哪一種產品類的實例。下面是簡單工廠UML模型:
那麼簡單工廠模式是在什麼場景下使用呢,下面就以本人的理解舉例說明:
就拿登錄功能來說,假如應用系統需要支持多種登錄方式如:手機認證、郵箱認證、用戶名登錄。那麼自然的做法就是建立一個各種登錄方式都適用的接口。
定義登錄接口:
package com.simple.factory;
/**
* 登錄接口
* */
public interface Login {
public boolean login(String name, String password);
}
手機號碼登錄:
package com.simple.factory;
public class PhoneNumberLogin implements Login {
@Override
public boolean login(String name, String password) {
// 登錄處理邏輯
if (password.equals("123123")) {
return true;
} else {
return false;
}
}
}
郵箱登錄:
package com.simple.factory;
/**
* 郵箱登錄
* */
public class EmailLogin implements Login {
@Override
public boolean login(String name, String password) {
// 登錄處理邏輯
if (password.equals("123123")) {
return true;
} else {
return false;
}
}
}
用戶名登錄:
package com.simple.factory;
public class UserNameLogin implements Login {
@Override
public boolean login(String name, String password) {
// 登錄處理邏輯
if (password.equals("123123")) {
return true;
} else {
return false;
}
}
}
靜態工廠核心類:
package com.simple.factory;
/**
* 靜態工廠核心類
* */
public class LoginManager {
public static Login factory(String type) {
if (type.equals("Email")) {
return new EmailLogin();
}
if (type.equals("PhoneNumber")) {
return new PhoneNumberLogin();
}
if (type.equals(type.equals("UserName"))) {
return new UserNameLogin();
}
return null;
}
}
測試客戶端:
package com.simple.factory;
/**
* 測試客戶端
* */
public class Client {
public static void main(String[] args) {
String mLoginType = "PhoneNumber";
String name = "dashu";
String password = "123123";
Login login = LoginManager.factory(mLoginType);
boolean bool = login.login(name, password);
if (bool) {
System.out.println("登錄成功");
} else {
System.out.println("登錄失敗");
}
}
}
簡單工廠模式的優點
模式的核心是工廠類。這個類含有必要的邏輯判斷,可以決定在什麼時候創建哪一個登錄驗證類的實例,而調用者則可以免除直接創建對象的責任。簡單工廠模式通過這種做法實現了對責任的分割,當系統引入新的登錄方式的時候無需修改調用者。
簡單工廠模式的缺點
這個工廠類集中了所以的創建邏輯,當有複雜的多層次等級結構時,所有的業務邏輯都在這個工廠類中實現。什麼時候它不能工作了,整個系統都會受到影響。