別扯了,工廠方法模式其實很簡單
- 本章難度:★★☆☆☆
- 本章重點(diǎn):用最簡短的篇幅介紹工廠方法模式最核心的知識,理解工廠方法模式的設(shè)計精髓,并能夠靈活運(yùn)用到實際項目中,編寫可維護(hù)的代碼。
大家好,我是冰河~~
今天給大家介紹《Java極簡設(shè)計模式》的第03章,工廠方法模式(FactoryMethod),多一句沒有,少一句不行,用最簡短的篇幅講述設(shè)計模式最核心的知識,好了,開始今天的內(nèi)容。
一、概述
定義一個用于創(chuàng)建對象的接口,讓子類決定實例化哪一個類。FactoryMethod使一個類的實例化延遲到其子類。
二、適用性
1.當(dāng)一個類不知道它所必須創(chuàng)建的對象的類的時候。
2.當(dāng)一個類希望由它的子類來指定它所創(chuàng)建的對象的時候。
3.當(dāng)類將創(chuàng)建對象的職責(zé)委托給多個幫助子類中的某一個,并且你希望將哪一個幫助子類是代理者這一信息局部化的時候。
三、參與者
1.Product 定義工廠方法所創(chuàng)建的對象的接口。
2.ConcreteProduct 實現(xiàn)Product接口。
3.Creator 聲明工廠方法,該方法返回一個Product類型的對象。Creator也可以定義一個工廠方法的缺省實現(xiàn),它返回一個缺省的ConcreteProduct對象??梢哉{(diào)用工廠方法以創(chuàng)建一個Product對象。
4.ConcreteCreator 重定義工廠方法以返回一個ConcreteProduct實例。
四、類圖
圖片
五、示例
Product
package io.binghe.design.factotymethod;
/**
* 定義一個接口Work
* @author binghe
*/
public interface Work {
/**
* 定義方法
*/
void doWork();
}
ConcreteProduct
package io.binghe.design.factotymethod;
/**
* Work接口的具體實現(xiàn)類
* @author binghe
*/
public class TeacherWork implements Work {
public void doWork() {
System.out.println("老師審批作業(yè)!");
}
}
package io.binghe.design.factotymethod;
/**
* Work接口的具體實現(xiàn)類
* @author binghe
*/
public class StudentWork implements Work {
@Override
public void doWork() {
System.out.println("學(xué)生做作業(yè)!");
}
}
Creator
package io.binghe.design.factotymethod;
/**
* 抽象工廠接口
* @author binghe
*/
public interface IWorkFactory {
/**
* 定義獲取Work實例對象的方法
* @return
*/
Work getWork();
}
ConcreteCreator
package io.binghe.design.factotymethod;
/**
* IWorkFactory工廠的實現(xiàn)類
* @author binghe
*/
public class StudentWorkFactory implements IWorkFactory {
@Override
public Work getWork() {
return new StudentWork();
}
}
package io.binghe.design.factotymethod;
/**
* IWorkFactory工廠的實現(xiàn)類
* @author binghe
*/
public class TeacherWorkFactory implements IWorkFactory {
@Override
public Work getWork() {
return new TeacherWork();
}
}
Test
package io.binghe.design.factotymethod;
/**
* 測試類
* @author binghe
*/
public class Test {
public static void main(String[] args) {
IWorkFactory studentWorkFactory = new StudentWorkFactory();
studentWorkFactory.getWork().doWork();
IWorkFactory teacherWorkFactory = new TeacherWorkFactory();
teacherWorkFactory.getWork().doWork();
}
}
Result
學(xué)生做作業(yè)!
老師審批作業(yè)!
好了,今天就到這兒吧,相信大家對工廠方法模式有了進(jìn)一步的認(rèn)識,我是冰河,我們下期見~~