java設計模式之工廠模式詳解
更新時間:2024年11月08日 09:30:48 作者:北極熊不在北極
本文介紹了三種常見的設計模式:簡單廠模式、工廠方法模式和抽象工廠模式,簡單廠模式通過一個工廠類來生產不同的產品實例,例如同時生產華為和小米手機,工廠方法模式則通過定義一個創(chuàng)建對象的接口,讓子類決定實例化哪一個類
一、簡單廠模式
一個工廠既代工生產華為手機也生產小米手機。
- 手機接口類
package com.liuyc.designpattern.factory; public interface Phone { void showInfo(); }
- 華為手機實現類
package com.liuyc.designpattern.factory; public class HuaWeiPhone implements Phone{ @Override public void showInfo() { System.out.println("華為手機"); } }
- 小米手機實現類
package com.liuyc.designpattern.factory; public class XiaoMiPhone implements Phone{ @Override public void showInfo() { System.out.println("小米手機"); } }
- 生產手機工廠類
package com.liuyc.designpattern.factory.simplefactory; import com.liuyc.designpattern.factory.Phone; public class SimpleFactory { public static Phone getPhone(String className){ Phone phone = null; try { Class<Phone> aClass = (Class<Phone>) Class.forName(className); phone = aClass.newInstance(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } return phone; } }
- 具體使用類
package com.liuyc.designpattern.factory.simplefactory; import com.liuyc.designpattern.factory.Phone; public class SimpleFactoryMain { public static void main(String[] args) { Phone phone = SimpleFactory.getPhone("com.liuyc.designpattern.factory.XiaoMiPhone"); phone.showInfo(); } }
二、工廠方法模式
- 一個生產手機的工廠接口類
package com.liuyc.designpattern.factory.factorymethod; import com.liuyc.designpattern.factory.Phone; public interface PhoneFactory { Phone getPhone(); }
- 具體生產華為手機的工廠
package com.liuyc.designpattern.factory.factorymethod; import com.liuyc.designpattern.factory.HuaWeiPhone; import com.liuyc.designpattern.factory.Phone; public class HuaWeiPhoneFactory implements PhoneFactory { @Override public Phone getPhone() { return new HuaWeiPhone(); } }
- 具體生產小米手機的工廠
package com.liuyc.designpattern.factory.factorymethod; import com.liuyc.designpattern.factory.Phone; import com.liuyc.designpattern.factory.XiaoMiPhone; public class XiaoMiPhoneFactory implements PhoneFactory { @Override public Phone getPhone() { return new XiaoMiPhone(); } }
- 具體使用類
package com.liuyc.designpattern.factory.factorymethod; import com.liuyc.designpattern.factory.Phone; public class FactoryMethodMain { public static void main(String[] args) { PhoneFactory phoneFactory = new XiaoMiPhoneFactory(); Phone phone = phoneFactory.getPhone(); phone.showInfo(); } }
三、抽象工廠模式
現在,不管是華為也好,小米也好,他們已不滿足于只生產手機了,他們也開始造車了,現在有一個“組”的概念了,或者說族。
- 小車的接口類
package com.liuyc.designpattern.factory; public interface Car { void showInfo(); }
- 華為汽車
package com.liuyc.designpattern.factory; public class HuaWeiCar implements Car { @Override public void showInfo() { System.out.println("華為小汽車"); } }
- 小米汽車
package com.liuyc.designpattern.factory; public class XiaoMiCar implements Car { @Override public void showInfo() { System.out.println("小米汽車"); } }
- 抽象工廠,定義既能生產手機,也是生產汽車
package com.liuyc.designpattern.factory.abstactfactory; import com.liuyc.designpattern.factory.Car; import com.liuyc.designpattern.factory.Phone; public interface AbstractFactory { Phone getPhone(); Car getCar(); }
- 華為工廠
package com.liuyc.designpattern.factory.abstactfactory; import com.liuyc.designpattern.factory.Car; import com.liuyc.designpattern.factory.HuaWeiCar; import com.liuyc.designpattern.factory.HuaWeiPhone; import com.liuyc.designpattern.factory.Phone; public class HuaWeiFactory implements AbstractFactory{ @Override public Phone getPhone() { return new HuaWeiPhone(); } @Override public Car getCar() { return new HuaWeiCar(); } }
- 小米工廠
package com.liuyc.designpattern.factory.abstactfactory; import com.liuyc.designpattern.factory.*; public class XiaoMiFactory implements AbstractFactory{ @Override public Phone getPhone() { return new XiaoMiPhone(); } @Override public Car getCar() { return new XiaoMiCar(); } }
- 具體使用
package com.liuyc.designpattern.factory.abstactfactory; import com.liuyc.designpattern.factory.Car; import com.liuyc.designpattern.factory.Phone; public class AbstractFactoryMain { public static void main(String[] args) { AbstractFactory abstractFactory = new XiaoMiFactory(); Car car = abstractFactory.getCar(); Phone phone = abstractFactory.getPhone(); car.showInfo(); phone.showInfo(); } }
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
SpringBoot單元測試使用@Test沒有run方法的解決方案
這篇文章主要介紹了SpringBoot單元測試使用@Test沒有run方法的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01Mybatis中SqlMapper配置的擴展與應用詳細介紹(1)
這篇文章主要介紹了Mybatis中SqlMapper配置的擴展與應用(1)的相關資料,非常不錯具有參考借鑒價值,需要的朋友可以參考下2016-11-11Spring Boot結合IDEA自帶Maven插件如何快速切換profile
IDEA是目前 Java 開發(fā)者中使用最多的開發(fā)工具,它有著簡約的設計風格,強大的集成工具,便利的快捷鍵,這篇文章主要介紹了Spring Boot結合IDEA自帶Maven插件快速切換profile,需要的朋友可以參考下2023-03-03Java?IO模型之BIO、NIO、AIO三種常見IO模型解析
這篇文章主要介紹了今天我們來聊Java?IO模型,BIO、NIO、AIO三種常見IO模型,我們從應用調用的過程中來分析一下整個IO的執(zhí)行過程,不過在此之前,我們需要簡單的了解一下整個操作系統(tǒng)的空間布局,需要的朋友可以參考下2024-07-07