java設(shè)計模式之工廠模式詳解
一、簡單廠模式
一個工廠既代工生產(chǎn)華為手機也生產(chǎn)小米手機。
- 手機接口類
package com.liuyc.designpattern.factory; public interface Phone { void showInfo(); }
- 華為手機實現(xiàn)類
package com.liuyc.designpattern.factory; public class HuaWeiPhone implements Phone{ @Override public void showInfo() { System.out.println("華為手機"); } }
- 小米手機實現(xiàn)類
package com.liuyc.designpattern.factory; public class XiaoMiPhone implements Phone{ @Override public void showInfo() { System.out.println("小米手機"); } }
- 生產(chǎn)手機工廠類
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(); } }
二、工廠方法模式
- 一個生產(chǎn)手機的工廠接口類
package com.liuyc.designpattern.factory.factorymethod; import com.liuyc.designpattern.factory.Phone; public interface PhoneFactory { Phone getPhone(); }
- 具體生產(chǎn)華為手機的工廠
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(); } }
- 具體生產(chǎn)小米手機的工廠
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(); } }
三、抽象工廠模式
現(xiàn)在,不管是華為也好,小米也好,他們已不滿足于只生產(chǎn)手機了,他們也開始造車了,現(xiàn)在有一個“組”的概念了,或者說族。
- 小車的接口類
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("小米汽車"); } }
- 抽象工廠,定義既能生產(chǎn)手機,也是生產(chǎn)汽車
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(); } }
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
springboot + jpa實現(xiàn)刪除數(shù)據(jù)的操作代碼
這篇文章主要介紹了springboot + jpa實現(xiàn)刪除數(shù)據(jù)的操作代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2024-05-05Spring MVC 中 短信驗證碼功能的實現(xiàn)方法
短信驗證功能在各個網(wǎng)站應(yīng)用都非常廣泛,那么在springmvc中如何實現(xiàn)短信驗證碼功能呢?今天小編抽時間給大家介紹下Spring MVC 中 短信驗證碼功能的實現(xiàn)方法,一起看看吧2016-09-09SpringBoot單元測試使用@Test沒有run方法的解決方案
這篇文章主要介紹了SpringBoot單元測試使用@Test沒有run方法的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01Mybatis中SqlMapper配置的擴展與應(yīng)用詳細介紹(1)
這篇文章主要介紹了Mybatis中SqlMapper配置的擴展與應(yīng)用(1)的相關(guān)資料,非常不錯具有參考借鑒價值,需要的朋友可以參考下2016-11-11Spring Boot結(jié)合IDEA自帶Maven插件如何快速切換profile
IDEA是目前 Java 開發(fā)者中使用最多的開發(fā)工具,它有著簡約的設(shè)計風格,強大的集成工具,便利的快捷鍵,這篇文章主要介紹了Spring Boot結(jié)合IDEA自帶Maven插件快速切換profile,需要的朋友可以參考下2023-03-03Java?IO模型之BIO、NIO、AIO三種常見IO模型解析
這篇文章主要介紹了今天我們來聊Java?IO模型,BIO、NIO、AIO三種常見IO模型,我們從應(yīng)用調(diào)用的過程中來分析一下整個IO的執(zhí)行過程,不過在此之前,我們需要簡單的了解一下整個操作系統(tǒng)的空間布局,需要的朋友可以參考下2024-07-07