1.簡(jiǎn)單工廠模式
基本流程:
首先將需要?jiǎng)?chuàng)建的各種不同對(duì)象的相關(guān)代碼封裝到不同的類中,這些類稱之為具體產(chǎn)品類,而將他們公共的代碼進(jìn)行抽象和提取后封裝在一個(gè)抽象產(chǎn)品類中,每一個(gè)具體產(chǎn)品類都是抽象產(chǎn)品類的子類;然后提供一個(gè)工廠類用于創(chuàng)建各種產(chǎn)品,在工廠類中提供一個(gè)創(chuàng)建產(chǎn)品的工廠方法,該方法可以根據(jù)所傳入的參數(shù)不同創(chuàng)建不同的具體產(chǎn)品對(duì)象;客戶端只需要調(diào)用工廠類的工廠方法并傳入響應(yīng)的參數(shù)即可得到一個(gè)產(chǎn)品對(duì)象。
簡(jiǎn)單工廠模式:定義一個(gè)工廠類,它可以根據(jù)參數(shù)的不同返回不同類的實(shí)例,被創(chuàng)建的實(shí)例通常都具有共同的父類。因?yàn)樵诤?jiǎn)單工廠模式中用于創(chuàng)建實(shí)例的方法是靜態(tài)方法,因此簡(jiǎn)單工廠模式又被稱之為靜態(tài)工廠方法模式,它屬于類創(chuàng)建型模式

abstract class Product {
//所有產(chǎn)品類的公共業(yè)務(wù)方法
public void methodSame() {
//公共方法的實(shí)現(xiàn)
}
//聲明抽象業(yè)務(wù)方法
public abstract void methodDiff();
}
class ConcreteProductA extends Product {
//實(shí)現(xiàn)業(yè)務(wù)方法
public void methodDiff() {
//業(yè)務(wù)方法的實(shí)現(xiàn)
}
}
class ConcreteProductB extends Product {
//實(shí)現(xiàn)業(yè)務(wù)方法
public void methodDiff() {
//業(yè)務(wù)方法的實(shí)現(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)品對(duì)象
product.methodSame();
product.methodDiff();
}
}
2.工廠方法模式
工廠方法模式:定義一個(gè)用于創(chuàng)建對(duì)象的接口,讓子類決定將哪一個(gè)類實(shí)例化。工廠方法模式讓一個(gè)類的實(shí)例化延遲到其子類。工廠方法模式又簡(jiǎn)稱為工廠模式,又可稱作虛擬構(gòu)造器模式或多態(tài)工廠模式。工廠方法模式是一種類創(chuàng)建型模式

//日志記錄器接口:抽象產(chǎn)品
interface Logger {
public void writeLog();
}
//數(shù)據(jù)庫(kù)日志記錄器:具體產(chǎn)品
class DatabaseLogger implements Logger {
public void writeLog() {
System.out.println("數(shù)據(jù)庫(kù)日志記錄。");
}
}
//文件日志記錄器:具體產(chǎn)品
class FileLogger implements Logger {
public void writeLog() {
System.out.println("文件日志記錄。");
}
}
//日志記錄器工廠接口:抽象工廠
interface LoggerFactory {
public Logger createLogger();
}
//數(shù)據(jù)庫(kù)日志記錄器工廠類:具體工廠
class DatabaseLoggerFactory implements LoggerFactory {
public Logger createLogger() {
//連接數(shù)據(jù)庫(kù),代碼省略
//創(chuàng)建數(shù)據(jù)庫(kù)日志記錄器對(duì)象
Logger logger = new DatabaseLogger();
//初始化數(shù)據(jù)庫(kù)日志記錄器,代碼省略
return logger;
}
}
//文件日志記錄器工廠類:具體工廠
class FileLoggerFactory implements LoggerFactory {
public Logger createLogger() {
//創(chuàng)建文件日志記錄器對(duì)象
Logger logger = new FileLogger();
//創(chuàng)建文件,代碼省略
return logger;
}
}
編寫相關(guān)測(cè)試代碼
class Client {
public static void main(String args[]) {
LoggerFactory factory;
Logger logger;
factory = new FileLoggerFactory(); //可引入配置文件實(shí)現(xiàn)
logger = factory.createLogger();
logger.writeLog();
}
}
3.抽象工廠模式
抽象工廠模式:提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴對(duì)象的接口,而無須指定它們具體的類。抽象工廠模式又稱為Kit模式,它是一種對(duì)象創(chuàng)建型模式。
