欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

一、簡單廠模式

一個(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ù)的操作代碼

    這篇文章主要介紹了springboot + jpa實(shí)現(xiàn)刪除數(shù)據(jù)的操作代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-05-05
  • Spring MVC 中 短信驗(yàn)證碼功能的實(shí)現(xiàn)方法

    Spring 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-09
  • 深入理解java重載和重寫

    深入理解java重載和重寫

    這篇文章主要介紹了Java方法重載和重寫原理區(qū)別解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-07-07
  • SpringBoot單元測試使用@Test沒有run方法的解決方案

    SpringBoot單元測試使用@Test沒有run方法的解決方案

    這篇文章主要介紹了SpringBoot單元測試使用@Test沒有run方法的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java背包問題求解實(shí)例代碼

    Java背包問題求解實(shí)例代碼

    這篇文章主要介紹了Java背包問題求解實(shí)例代碼,其中涉及兩種背包:01和完全背包。分別講述了兩種背包的思路和實(shí)現(xiàn)方法,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-10-10
  • Mybatis中SqlMapper配置的擴(kuò)展與應(yīng)用詳細(xì)介紹(1)

    Mybatis中SqlMapper配置的擴(kuò)展與應(yīng)用詳細(xì)介紹(1)

    這篇文章主要介紹了Mybatis中SqlMapper配置的擴(kuò)展與應(yīng)用(1)的相關(guān)資料,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-11-11
  • IDEA?隱藏DEBUG日志的解決方法

    IDEA?隱藏DEBUG日志的解決方法

    IDEA?打印太多的DEBUG日志,看起來很煩,有沒有辦法隱藏日志,網(wǎng)上找了一圈,沒有誰寫的靠譜的,下面小編給大家分享下IDEA?如何隱藏DEBUG日志,需要的朋友可以參考下
    2022-09-09
  • Spring Boot結(jié)合IDEA自帶Maven插件如何快速切換profile

    Spring Boot結(jié)合IDEA自帶Maven插件如何快速切換profile

    IDEA是目前 Java 開發(fā)者中使用最多的開發(fā)工具,它有著簡約的設(shè)計(jì)風(fēng)格,強(qiáng)大的集成工具,便利的快捷鍵,這篇文章主要介紹了Spring Boot結(jié)合IDEA自帶Maven插件快速切換profile,需要的朋友可以參考下
    2023-03-03
  • Java?IO模型之BIO、NIO、AIO三種常見IO模型解析

    Java?IO模型之BIO、NIO、AIO三種常見IO模型解析

    這篇文章主要介紹了今天我們來聊Java?IO模型,BIO、NIO、AIO三種常見IO模型,我們從應(yīng)用調(diào)用的過程中來分析一下整個(gè)IO的執(zhí)行過程,不過在此之前,我們需要簡單的了解一下整個(gè)操作系統(tǒng)的空間布局,需要的朋友可以參考下
    2024-07-07
  • java中的interface接口實(shí)例詳解

    java中的interface接口實(shí)例詳解

    這篇文章主要介紹了 java中的interface接口實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-03-03

最新評論