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