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 @PostConstruct原理用法解析
這篇文章主要介紹了SpringBoot @PostConstruct原理用法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
SpringBoot集成Hera實(shí)現(xiàn)分布式應(yīng)用監(jiān)控與追蹤解決方案
Hera是一款由美團(tuán)點(diǎn)評開源的分布式應(yīng)用監(jiān)控與追蹤系統(tǒng),專注于解決微服務(wù)架構(gòu)下的性能監(jiān)控、故障診斷和鏈路追蹤問題,本文給大家介紹了SpringBoot集成Hera實(shí)現(xiàn)分布式應(yīng)用監(jiān)控與追蹤的解決方案,需要的朋友可以參考下2026-01-01
Android與iOS設(shè)備MAC地址生成原理及Java實(shí)現(xiàn)詳解
在無線網(wǎng)絡(luò)通信中,MAC(Media Access Control)地址是設(shè)備的唯一網(wǎng)絡(luò)標(biāo)識符,本文主要介紹了Android與iOS設(shè)備MAC地址生成原理以及Java實(shí)現(xiàn)方法,需要的可以了解下2025-05-05
基于Springboot實(shí)現(xiàn)JWT認(rèn)證的示例代碼
本文主要介紹了基于Springboot實(shí)現(xiàn)JWT認(rèn)證,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11
Java實(shí)現(xiàn)Elasticsearch查詢當(dāng)前索引全部數(shù)據(jù)的完整代碼
這篇文章主要介紹了如何在Java中實(shí)現(xiàn)查詢Elasticsearch索引中指定條件下的全部數(shù)據(jù),通過設(shè)置滾動(dòng)查詢參數(shù)(scroll),可以一次性獲取滿足條件的數(shù)據(jù),而不需要限制每頁的查詢條數(shù)大小,這樣可以避免因數(shù)據(jù)量過大而引發(fā)的性能問題,需要的朋友可以參考下2025-02-02
Spring Boot集成SpringFox 3.0與Pageable參數(shù)處理方法
這篇文章主要介紹了Spring Boot集成SpringFox 3.0與Pageable參數(shù)處理,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-10-10

