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