真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Java描述設(shè)計(jì)模式(04):抽象工廠模式

本文源碼:GitHub·點(diǎn)這里 || GitEE·點(diǎn)這里

成都創(chuàng)新互聯(lián)專(zhuān)注于八宿網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供八宿營(yíng)銷(xiāo)型網(wǎng)站建設(shè),八宿網(wǎng)站制作、八宿網(wǎng)頁(yè)設(shè)計(jì)、八宿網(wǎng)站官網(wǎng)定制、小程序制作服務(wù),打造八宿網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供八宿網(wǎng)站排名全網(wǎng)營(yíng)銷(xiāo)落地服務(wù)。

一、抽象工廠模式

1、生活場(chǎng)景

汽車(chē)生產(chǎn)根據(jù)用戶選擇的汽車(chē)類(lèi)型,指定不同的工廠進(jìn)行生產(chǎn),選擇紅旗轎車(chē),就要使用中國(guó)工廠,選擇奧迪轎車(chē),就要使用德國(guó)工廠。

2、抽象工廠模式

1) 抽象工廠模式:定義了一個(gè)interface用于創(chuàng)建相關(guān)對(duì)象或相互依賴的對(duì)象,而無(wú)需指明具體的類(lèi);
2) 抽象工廠模式可以將簡(jiǎn)單工廠模式和工廠方法模式進(jìn)行整合;
3) 從設(shè)計(jì)層面看,抽象工廠模式就是對(duì)簡(jiǎn)單工廠模式的改進(jìn)(或者稱為進(jìn)一步的抽象)。
4) 將工廠抽象成兩層,AbstractFactory(抽象工廠) 和 具體實(shí)現(xiàn)的工廠子類(lèi),方便程序擴(kuò)展。

3、代碼UML圖

Java描述設(shè)計(jì)模式(04):抽象工廠模式

4、源代碼實(shí)現(xiàn)

/**
 * 抽象工廠模式
 */
public class C01_AbstractFactory {
    public static void main(String[] args) {
        CarProductFactory factory = new ChinaCarFactory() ;
        factory.getCar("hq") ;
        factory = new GermanyCarFactory () ;
        factory.getCar("ad") ;
    }
}

// 汽車(chē)生產(chǎn)抽象工廠
interface CarProductFactory {
    CarProduct getCar (String type) ;
}
// 中國(guó)汽車(chē)工廠
class ChinaCarFactory implements CarProductFactory {
    @Override
    public CarProduct getCar(String type) {
        CarProduct product = null ;
        if ("hq".equals(type)){
            product = new HQCar() ;
            product.name="紅旗一號(hào)" ;
            product.date="1999-09-19" ;
            product.material();
            product.origin();
        } else if ("df".equals(type)){
            product = new DFCar() ;
            product.name="東風(fēng)一號(hào)" ;
            product.date="2019-09-19" ;
            product.material();
            product.origin();
        }
        return product ;
    }
}
// 德國(guó)汽車(chē)工廠
class GermanyCarFactory implements CarProductFactory {
    @Override
    public CarProduct getCar(String type) {
        CarProduct product = null ;
        if ("ad".equals(type)){
            product = new ADCar() ;
            product.name="奧迪A8" ;
            product.date="2017-09-19" ;
            product.material();
            product.origin();
        } else if ("bm".equals(type)){
            product = new BMCar() ;
            product.name="寶馬X8" ;
            product.date="2018-09-19" ;
            product.material();
            product.origin();
        }
        return product ;
    }
}
// 汽車(chē)生產(chǎn)抽象類(lèi)
abstract class CarProduct {
    /**
     * 汽車(chē)名稱
     */
    protected String name ;
    /**
     * 生產(chǎn)日期
     */
    protected String date ;
    /**
     * 材料
     */
    abstract void material () ;
    /**
     * 產(chǎn)地
     */
    abstract void origin () ;
}
// 紅旗車(chē)
class HQCar extends CarProduct {
    @Override
    void material() {
        System.out.println(super.name+"材料...");
    }
    @Override
    void origin() {
        System.out.println(super.date+":"+super.name+"在中國(guó)北京生產(chǎn)");
    }
}
// 東風(fēng)車(chē)
class DFCar extends CarProduct {
    @Override
    void material() {
        System.out.println(super.name+"材料...");
    }
    @Override
    void origin() {
        System.out.println(super.date+":"+super.name+"在中國(guó)南京生產(chǎn)");
    }
}
// 奧迪車(chē)
class ADCar extends CarProduct {
    @Override
    void material() {
        System.out.println(super.name+"材料...");
    }
    @Override
    void origin() {
        System.out.println(super.date+":"+super.name+"在德國(guó)柏林生產(chǎn)");
    }
}
// 寶馬車(chē)
class BMCar extends CarProduct {
    @Override
    void material() {
        System.out.println(super.name+"材料...");
    }
    @Override
    void origin() {
        System.out.println(super.date+":"+super.name+"在德國(guó)慕尼黑生產(chǎn)");
    }
}

二、Spring框架應(yīng)用

1、場(chǎng)景描述

Spring框架中獲取配置文件中Bean的多種方式。

2、核心配置


    


    

3、測(cè)試文件

這里使用了兩種方式獲取。

@RunWith(SpringJUnit4Cla***unner.class)
@ContextConfiguration(locations = {"classpath:/spring/spring-abstract-factory.xml"})
public class SpringTest {

    @Resource
    private BeanFactory beanFactory ;

    @Test
    public void test01 (){
        CarBean carBean = (CarBean)beanFactory.getBean("carBean") ;
        System.out.println(carBean.getName());
    }

    @Test
    public void test02 (){
        ApplicationContext context01 = new ClassPathXmlApplicationContext(
                "/spring/spring-abstract-factory.xml");
        CarBean carBean = (CarBean)context01.getBean("carBean1") ;
        System.out.println(carBean.getName());
    }
}

4、結(jié)構(gòu)分析

Java描述設(shè)計(jì)模式(04):抽象工廠模式

Java描述設(shè)計(jì)模式(04):抽象工廠模式

抽象工廠封裝對(duì)象的創(chuàng)建。在Spring中,通過(guò)實(shí)現(xiàn)BeanFactory。可以從Spring的各種容器獲取bean。根據(jù)Bean的配置,getBean方法可以返回不同類(lèi)型的對(duì)象(單例作用域)或初始化新的對(duì)象(原型作用域)。在BeanFactory的實(shí)現(xiàn)中,我們可以區(qū)分:ClassPathXmlApplicationContext,XmlWebApplicationContext等。

三、工廠模式小結(jié)

三種工廠模式 (簡(jiǎn)單工廠模式、工廠方法模式、抽象工廠模式),工廠模式的核心用意將實(shí)例化對(duì)象的代碼封裝起來(lái),放到工廠類(lèi)中統(tǒng)一管理和維護(hù),完成代碼依賴關(guān)系的解耦。從而提高程序的可擴(kuò)展性和維護(hù)性。

四、源代碼地址

GitHub·地址
https://github.com/cicadasmile/model-arithmetic-parent
GitEE·地址
https://gitee.com/cicadasmile/model-arithmetic-parent

分享名稱:Java描述設(shè)計(jì)模式(04):抽象工廠模式
當(dāng)前路徑:http://weahome.cn/article/iighhh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部