工厂模式

2019-10-27  本文已影响0人  村东头老骥

工厂模式

概念 : 定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子类当中.满足了创建模式中所要求的"创建与使用相分离"的特点

三种实现分类

基本创建方式(不使用工厂模式)

代码实现

定义Phone的接口

package FactoryDemo.Simplefactory;

/**
 * 定义实现手机接口
 */
public interface Phone {

    /**
     * 定义手机的功能方法
     */
    public void call();
}

定义不同手机的实现类

## Huawei
package FactoryDemo.Simplefactory;

public class Huawei implements Phone {
    @Override
    public void call() {
        System.out.println("我正在使用华为手机");
    }
}
## Vivo
package FactoryDemo.Simplefactory;

public class Vivo implements Phone {

    @Override
    public void call() {
        System.out.println("我正在使用Vivo手机...");
    }
}

创建实现类

package FactoryDemo.Simplefactory;


/**
 * 当我们不使用工厂模式的时候进行调用
 *      需要对接口类,以及实现类的方法和参数了解,增加了创建对象的复杂和繁琐.
 *      如果当有多个调用者调用Huawei类和vivo类的过程中此时被调用类的实现发生了改变(增加了新的成员)
 *      则需要对所有的类new Huawei()/new Huawei()创建过程中进行改变.增加了功能扩展的代码量和繁琐
 */
public class Consumer {
    public static void main(String[] args) {
        Huawei huawei = new Huawei();  // 创建华为手机对象
        Vivo vivo = new Vivo();        // 创建vivo手机对象

        huawei.call();  // 调用接口方法
        vivo.call();
    }
}

简单工厂模式

概念 : 专门定义一个类创建其他类的实例,被创建实例的类型可能是接口,抽象类,也可以是具体类,实例化对象的时候不在使用new Object() 的形式,可以根据用户的需要创建相关的实例化对象.去除了调用者的创建类实例的依赖.

两种创建简单工厂的实现类

## 方式一
package FactoryDemo.Simplefactory;

/**
 * 简单工厂模式创建对象
 */
public class PhoneFactory {
    /**
     * 调用者根据需要调用自己所需要的实现类
     */
    public static Phone getPhoneObject(String type){
        if("华为".equals(type)){
            return new Huawei();
        }else if("vivo".equals(type)){
            return new Vivo();
        } else {
            return null;
        }
    }
}

## 方式二
package FactoryDemo.Simplefactory;

/**
 * 简单工厂模式创建对象
 */
public class PhoneFactory2 {

    public static Huawei createHuawei() {
        return new Huawei();
    }

    public static Vivo createVivo() {
        return new Vivo();
    }
}

实现类的简单工厂模式创建

package FactoryDemo.Simplefactory;

public class Consumer2 {

    public static void main(String[] args) {
        // 不同的方式创建对象
        Phone huawei = PhoneFactory.getPhoneObject("华为");
        Phone vivo = PhoneFactory2.createVivo();
        // 调用方法测试
        huawei.call();
        vivo.call();
    }
}

工厂模式

概念 : 工厂方法模式是对简单工厂模式进一步的解耦,因为在工厂方法模式中一个子类对应一个工厂类,而这些工厂类都是实现与一个抽象接口.这相当于是把原本会因为业务代码而庞大的简单工厂类,拆分成了一个个的工厂类,这样代码就不会耦合在一个类中.

创建Phone和PhoneFactory

package FactoryDemo.FactoryMethod;

/**
 * 定义实现手机接口
 */
public interface Phone {

    /**
     * 定义手机的功能方法
     */
    public void call();
}
## PhoneFactory
package FactoryDemo.FactoryMethod;

public interface PhoneFactory {
    // 创建手机工厂代加工类,让各个手机的工厂实现该方法
    Phone createPhone();
}

工厂方式实现类

package FactoryDemo.FactoryMethod;

public class Huawei implements Phone 
    // 实现手机接口类
    @Override
    public void call() {
        System.out.println("我是工厂模式创建的华为手机...");
    }
}

package FactoryDemo.FactoryMethod;
// 注意实现PhoneFactory的create的方式实现类
public class HuaweiFactory implements PhoneFactory {

    @Override
    public Phone createPhone() {
        return new Huawei();
    }
}

抽象工厂模式

待更新...

上一篇 下一篇

猜你喜欢

热点阅读