JAVA 设计模式 之 工厂模式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 设计模式 之 工厂模式的主要内容,如果未能解决你的问题,请参考以下文章

JAVA设计模式之工厂模式

PHP面向对象之选择工厂和更新工厂

java设计模式之简单工厂模式

Java工厂模式之总有你想不到的知识

《疯狂学习之Java设计模式之简单工厂模式》

JAVA设计模式之工厂模式