1. 程式人生 > >JAVA 設計模式 之 工廠模式

JAVA 設計模式 之 工廠模式

java 工廠模式 設計模式


1、為什麽要使用工廠模式?

比方說,一位滴滴司機,如果要去開車掙錢的話,他得自己會制造汽車,然後,才能使用汽車掙

錢;對於這位司機來說,要求很高了,畢竟汽車很難制造出來;

如果使用工廠模式的話,這位司機,只需要知道汽車工廠就可以了,直接去工廠提車就行。從而降

低了對司機的技能要求。


2、工廠模式的核心本質是什麽?

1、實例化對象。用工廠方法代替new操作

2、將選擇實現類,創建對象的過程 進行統一的管理和控制;將調用者/客戶端跟具體的實現進行解耦


3、應用場景?

A、JDK中Calendar的getInstance方法

B、JDBC中Connection對象的獲取

C、Hibernate中SessionFactory創建Session

D、Spring中IOC容器創建管理bean對象


4、工廠模式的分類?

A、簡單工廠模式

B、工廠方法模式

C、抽象工廠模式


5、簡單工廠模式

5.1要點:

A、簡單工廠模式也稱為靜態工廠模式,因為工廠類裏一般都是使用靜態方法

通過接收不同的參數來創建不同的對象實例

B、擴展性:必須修改工廠類的代碼,才能進行擴展。


6 工廠方法模式

6.1要點:

A、每一實例對象,都對應著一個工廠;不再集中創建實例

B、擴展性:可以通過增加新的工廠類實現擴展,無需修改原來的代碼


7、抽象工廠模式

7.1要點:

A、對不同實例對象進行組合(用來生產不同產品族的全部產品)

B、支持增加產品組,不能增加新的產品;


7.2抽象工廠代碼實例:

第一,定義三個產品類

package com.xingej.patterns.factory.abstractfactory;

public interface Seat {
    void say();
}

class LowSeat implements Seat {
    @Override
    public void say() {
        System.out.println("----我是低級的車座哦-----");
    }
}

class HighSeat implements Seat {

    @Override
    public void say() {
        System.out.println("---我是高級的車座哦-----");
    };

}
package com.xingej.patterns.factory.abstractfactory;

public interface Wheel {
    void showInfo();
}

class LowWheel implements Wheel {
    @Override
    public void showInfo() {
        System.out.println("----我是低級車輪哦----");
    }
}

class HighWheel implements Wheel {
    @Override
    public void showInfo() {
        System.out.println("----我是高級車輪哦-----");
    }
}
package com.xingej.patterns.factory.abstractfactory;

public interface Engine {
    void show();
}

class HighEngine implements Engine {

    @Override
    public void show() {
        System.out.println("----我是高級引擎哦----");
    }

}

class LowEngine implements Engine {

    @Override
    public void show() {
        System.out.println("---我是低級引擎哦----");
    }

}


第二、定義一批產品組接口

package com.xingej.patterns.factory.abstractfactory;

/**
 * 定義了一批產品組
 * 
 * @author erjun 2017年11月9日 下午1:49:33
 */

public interface CarFactory {
    Engine buildEngine();

    Seat buildSeat();

    Wheel buildWheel();
}


第三、實現不同的產品組

package com.xingej.patterns.factory.abstractfactory;

public class HighCarFactory implements CarFactory {

    @Override
    public Engine buildEngine() {
        return new HighEngine();
    }

    @Override
    public Seat buildSeat() {
        return new HighSeat();
    }

    @Override
    public Wheel buildWheel() {
        return new HighWheel();
    }

}
package com.xingej.patterns.factory.abstractfactory;

public class LowCarFactory implements CarFactory {

    @Override
    public Engine buildEngine() {
        return new LowEngine();
    }

    @Override
    public Seat buildSeat() {
        return new LowSeat();
    }

    @Override
    public Wheel buildWheel() {
        return new LowWheel();
    }

}


測試:

package com.xingej.patterns.factory.abstractfactory;

import org.junit.Test;

public class AbstractFactoryTest {

    @Test
    public void testAbstractFactory() {

        CarFactory factory = new HighCarFactory();

        Engine highEngine = factory.buildEngine();

        highEngine.show();

        Seat highSeat = factory.buildSeat();
        highSeat.say();

        Wheel highWheel = factory.buildWheel();
        highWheel.showInfo();

    }

}

8、總結:

1、簡單工廠,對象的創建都是在一個工廠類裏實現的;(一般通過傳入不同的參數,來返回不同的對象)

2、工廠方法,給每個對象都創建一個工廠,也就是說,對象的創建都分配給不同的工廠去實現,不

在集中在一個工廠裏實現;

3、抽象工廠,在一個工廠裏,創建一系列彼此之間有關系的對象;比方說,抽象筆記本工廠裏,可

以創建主板,顯卡,處理器,鼠標等等


簡單工廠,工廠方法模式

代碼已經上傳到git上了

https://github.com/xej520/xingej-design-patterns



本文出自 “XEJ分布式工作室” 博客,請務必保留此出處http://xingej.blog.51cto.com/7912529/1981388

JAVA 設計模式 之 工廠模式