最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java設(shè)計(jì)模式之工廠模式詳解

 更新時(shí)間:2024年11月08日 09:30:48   作者:北極熊不在北極  
本文介紹了三種常見的設(shè)計(jì)模式:簡(jiǎn)單廠模式、工廠方法模式和抽象工廠模式,簡(jiǎn)單廠模式通過一個(gè)工廠類來生產(chǎn)不同的產(chǎn)品實(shí)例,例如同時(shí)生產(chǎn)華為和小米手機(jī),工廠方法模式則通過定義一個(gè)創(chuàng)建對(duì)象的接口,讓子類決定實(shí)例化哪一個(gè)類

一、簡(jiǎn)單廠模式

一個(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原理用法解析

    這篇文章主要介紹了SpringBoot @PostConstruct原理用法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • SpringBoot集成Hera實(shí)現(xiàn)分布式應(yīng)用監(jiān)控與追蹤解決方案

    SpringBoot集成Hera實(shí)現(xiàn)分布式應(yīng)用監(jiān)控與追蹤解決方案

    Hera是一款由美團(tuán)點(diǎn)評(píng)開源的分布式應(yīng)用監(jiān)控與追蹤系統(tǒng),專注于解決微服務(wù)架構(gòu)下的性能監(jiān)控、故障診斷和鏈路追蹤問題,本文給大家介紹了SpringBoot集成Hera實(shí)現(xiàn)分布式應(yīng)用監(jiān)控與追蹤的解決方案,需要的朋友可以參考下
    2026-01-01
  • springboot2.x引入feign踩的坑及解決

    springboot2.x引入feign踩的坑及解決

    這篇文章主要介紹了springboot2.x引入feign踩的坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java讀取.properties配置文件的幾種方式

    Java讀取.properties配置文件的幾種方式

    這篇文章主要介紹了Java讀取.properties配置文件的幾種方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • java靜態(tài)方法里使用spring的注入對(duì)象方式

    java靜態(tài)方法里使用spring的注入對(duì)象方式

    本文分析了在使用Spring框架時(shí),靜態(tài)方法中引用非靜態(tài)變量導(dǎo)致空指針的問題,并提出了使用`@PostConstruct`注解、`@Value`注解、構(gòu)造注入和`InitializingBean`接口等解決方案
    2026-04-04
  • Java中Comparator升序降序的具體使用

    Java中Comparator升序降序的具體使用

    本文主要介紹了Java中Comparator升序降序的具體使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Android與iOS設(shè)備MAC地址生成原理及Java實(shí)現(xiàn)詳解

    Android與iOS設(shè)備MAC地址生成原理及Java實(shí)現(xiàn)詳解

    在無線網(wǎng)絡(luò)通信中,MAC(Media Access Control)地址是設(shè)備的唯一網(wǎng)絡(luò)標(biāo)識(shí)符,本文主要介紹了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)證的示例代碼

    本文主要介紹了基于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查詢當(dāng)前索引全部數(shù)據(jù)的完整代碼

    這篇文章主要介紹了如何在Java中實(shí)現(xiàn)查詢Elasticsearch索引中指定條件下的全部數(shù)據(jù),通過設(shè)置滾動(dòng)查詢參數(shù)(scroll),可以一次性獲取滿足條件的數(shù)據(jù),而不需要限制每頁(yè)的查詢條數(shù)大小,這樣可以避免因數(shù)據(jù)量過大而引發(fā)的性能問題,需要的朋友可以參考下
    2025-02-02
  • Spring Boot集成SpringFox 3.0與Pageable參數(shù)處理方法

    Spring Boot集成SpringFox 3.0與Pageable參數(shù)處理方法

    這篇文章主要介紹了Spring Boot集成SpringFox 3.0與Pageable參數(shù)處理,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-10-10

最新評(píng)論

洛隆县| 正安县| 望奎县| 江源县| 手机| 宁阳县| 娄烦县| 和政县| 颍上县| 昭苏县| 沛县| 南康市| 车险| 科技| 慈溪市| 马山县| 韶关市| 沐川县| 自贡市| 吴江市| 秦安县| 左贡县| 长春市| 桂阳县| 高要市| 沂水县| 巴彦县| 金坛市| 九龙县| 寿光市| 石河子市| 西平县| 宝应县| 施秉县| 永康市| 永城市| 乐东| 小金县| 客服| 房山区| 翼城县|