1.簡單工廠模式
基本流程:
首先將需要創(chuàng)建的各種不同對象的相關(guān)代碼封裝到不同的類中,這些類稱之為具體產(chǎn)品類,而將他們公共的代碼進行抽象和提取后封裝在一個抽象產(chǎn)品類中锅尘,每一個具體產(chǎn)品類都是抽象產(chǎn)品類的子類暂吉;然后提供一個工廠類用于創(chuàng)建各種產(chǎn)品陆蟆,在工廠類中提供一個創(chuàng)建產(chǎn)品的工廠方法字支,該方法可以根據(jù)所傳入的參數(shù)不同創(chuàng)建不同的具體產(chǎn)品對象凤藏;客戶端只需要調(diào)用工廠類的工廠方法并傳入響應(yīng)的參數(shù)即可得到一個產(chǎn)品對象。
簡單工廠模式:定義一個工廠類堕伪,它可以根據(jù)參數(shù)的不同返回不同類的實例揖庄,被創(chuàng)建的實例通常都具有共同的父類。因為在簡單工廠模式中用于創(chuàng)建實例的方法是靜態(tài)方法欠雌,因此簡單工廠模式又被稱之為靜態(tài)工廠方法模式蹄梢,它屬于類創(chuàng)建型模式
abstract class Product {
//所有產(chǎn)品類的公共業(yè)務(wù)方法
public void methodSame() {
//公共方法的實現(xiàn)
}
//聲明抽象業(yè)務(wù)方法
public abstract void methodDiff();
}
class ConcreteProductA extends Product {
//實現(xiàn)業(yè)務(wù)方法
public void methodDiff() {
//業(yè)務(wù)方法的實現(xiàn)
}
}
class ConcreteProductB extends Product {
//實現(xiàn)業(yè)務(wù)方法
public void methodDiff() {
//業(yè)務(wù)方法的實現(xiàn)
}
}
class Factory {
//靜態(tài)工廠方法
public static Product getProduct(String arg) {
Product product = null;
if (arg.equalsIgnoreCase("A")) {
product = new ConcreteProductA();
//初始化設(shè)置product
}
else if (arg.equalsIgnoreCase("B")) {
product = new ConcreteProductB();
//初始化設(shè)置product
}
return product;
}
}
class Client {
public static void main(String args[]) {
Product product;
product = Factory.getProduct("A"); //通過工廠類創(chuàng)建產(chǎn)品對象
product.methodSame();
product.methodDiff();
}
}
2.工廠方法模式
工廠方法模式:定義一個用于創(chuàng)建對象的接口,讓子類決定將哪一個類實例化富俄。工廠方法模式讓一個類的實例化延遲到其子類禁炒。工廠方法模式又簡稱為工廠模式,又可稱作虛擬構(gòu)造器模式或多態(tài)工廠模式霍比。工廠方法模式是一種類創(chuàng)建型模式
image.png
//日志記錄器接口:抽象產(chǎn)品
interface Logger {
public void writeLog();
}
//數(shù)據(jù)庫日志記錄器:具體產(chǎn)品
class DatabaseLogger implements Logger {
public void writeLog() {
System.out.println("數(shù)據(jù)庫日志記錄幕袱。");
}
}
//文件日志記錄器:具體產(chǎn)品
class FileLogger implements Logger {
public void writeLog() {
System.out.println("文件日志記錄。");
}
}
//日志記錄器工廠接口:抽象工廠
interface LoggerFactory {
public Logger createLogger();
}
//數(shù)據(jù)庫日志記錄器工廠類:具體工廠
class DatabaseLoggerFactory implements LoggerFactory {
public Logger createLogger() {
//連接數(shù)據(jù)庫悠瞬,代碼省略
//創(chuàng)建數(shù)據(jù)庫日志記錄器對象
Logger logger = new DatabaseLogger();
//初始化數(shù)據(jù)庫日志記錄器们豌,代碼省略
return logger;
}
}
//文件日志記錄器工廠類:具體工廠
class FileLoggerFactory implements LoggerFactory {
public Logger createLogger() {
//創(chuàng)建文件日志記錄器對象
Logger logger = new FileLogger();
//創(chuàng)建文件,代碼省略
return logger;
}
}
編寫相關(guān)測試代碼
class Client {
public static void main(String args[]) {
LoggerFactory factory;
Logger logger;
factory = new FileLoggerFactory(); //可引入配置文件實現(xiàn)
logger = factory.createLogger();
logger.writeLog();
}
}
3.抽象工廠模式
抽象工廠模式:提供一個創(chuàng)建一系列相關(guān)或相互依賴對象的接口浅妆,而無須指定它們具體的類望迎。抽象工廠模式又稱為Kit模式,它是一種對象創(chuàng)建型模式凌外。
image.png