JAVA 設計模式 之 工廠模式
1、為什麽要使用工廠模式?
比方說,一位滴滴司機,如果要去開車掙錢的話,他得自己會制造汽車,然後,才能使用汽車掙
錢;對於這位司機來說,要求很高了,畢竟汽車很難制造出來;
如果使用工廠模式的話,這位司機,只需要知道汽車工廠就可以了,直接去工廠提車就行。從而降
低了對司機的技能要求。
2、工廠模式的核心本質是什麽?
1、實例化對象。用工廠方法代替new操作
2、將選擇實現類,創建對象的過程 進行統一的管理和控制;將調用者/客戶端跟具體的實現進行解耦
3、應用場景?
A、JDK中Calendar的getInstance方法
B、JDBC中Connection對象的獲取
C、Hibernate中SessionFactory創建Session
D、Spring中IOC容器創建管理bean對象
4、工廠模式的分類?
A、簡單工廠模式
B、工廠方法模式
C、抽象工廠模式
5、簡單工廠模式
5.1要點:
A、簡單工廠模式也稱為靜態工廠模式,因為工廠類裏一般都是使用靜態方法
通過接收不同的參數來創建不同的對象實例
B、擴展性:必須修改工廠類的代碼,才能進行擴展。
6 工廠方法模式
6.1要點:
A、每一實例對象,都對應著一個工廠;不再集中創建實例
B、擴展性:可以通過增加新的工廠類實現擴展,無需修改原來的代碼
7、抽象工廠模式
7.1要點:
A、對不同實例對象進行組合(用來生產不同產品族的全部產品)
B、支持增加產品組,不能增加新的產品;
7.2抽象工廠代碼實例:
第一,定義三個產品類
package com.xingej.patterns.factory.abstractfactory; public interface Seat { void say(); } class LowSeat implements Seat { @Override public void say() { System.out.println("----我是低級的車座哦-----"); } } class HighSeat implements Seat { @Override public void say() { System.out.println("---我是高級的車座哦-----"); }; }
package com.xingej.patterns.factory.abstractfactory; public interface Wheel { void showInfo(); } class LowWheel implements Wheel { @Override public void showInfo() { System.out.println("----我是低級車輪哦----"); } } class HighWheel implements Wheel { @Override public void showInfo() { System.out.println("----我是高級車輪哦-----"); } }
package com.xingej.patterns.factory.abstractfactory; public interface Engine { void show(); } class HighEngine implements Engine { @Override public void show() { System.out.println("----我是高級引擎哦----"); } } class LowEngine implements Engine { @Override public void show() { System.out.println("---我是低級引擎哦----"); } }
第二、定義一批產品組接口
package com.xingej.patterns.factory.abstractfactory; /** * 定義了一批產品組 * * @author erjun 2017年11月9日 下午1:49:33 */ public interface CarFactory { Engine buildEngine(); Seat buildSeat(); Wheel buildWheel(); }
第三、實現不同的產品組
package com.xingej.patterns.factory.abstractfactory; public class HighCarFactory implements CarFactory { @Override public Engine buildEngine() { return new HighEngine(); } @Override public Seat buildSeat() { return new HighSeat(); } @Override public Wheel buildWheel() { return new HighWheel(); } }
package com.xingej.patterns.factory.abstractfactory; public class LowCarFactory implements CarFactory { @Override public Engine buildEngine() { return new LowEngine(); } @Override public Seat buildSeat() { return new LowSeat(); } @Override public Wheel buildWheel() { return new LowWheel(); } }
測試:
package com.xingej.patterns.factory.abstractfactory; import org.junit.Test; public class AbstractFactoryTest { @Test public void testAbstractFactory() { CarFactory factory = new HighCarFactory(); Engine highEngine = factory.buildEngine(); highEngine.show(); Seat highSeat = factory.buildSeat(); highSeat.say(); Wheel highWheel = factory.buildWheel(); highWheel.showInfo(); } }
8、總結:
1、簡單工廠,對象的創建都是在一個工廠類裏實現的;(一般通過傳入不同的參數,來返回不同的對象)
2、工廠方法,給每個對象都創建一個工廠,也就是說,對象的創建都分配給不同的工廠去實現,不
在集中在一個工廠裏實現;
3、抽象工廠,在一個工廠裏,創建一系列彼此之間有關系的對象;比方說,抽象筆記本工廠裏,可
以創建主板,顯卡,處理器,鼠標等等
簡單工廠,工廠方法模式
代碼已經上傳到git上了
https://github.com/xej520/xingej-design-patterns
本文出自 “XEJ分布式工作室” 博客,請務必保留此出處http://xingej.blog.51cto.com/7912529/1981388
JAVA 設計模式 之 工廠模式