简单工厂模式

其实,严格意义上来讲,简单工厂不算是一个标准的设计模式,但是在我们的实际开发中,却经常使用。所以,在真正了解GOF 的23种设计模式之前,我们先来了解一下简单工厂。

简单回顾

我们都知道,Java有一个重要的原则,叫”面向接口编程”,那我们举一个简单的例子来说明一下,何谓”面向接口编程”。

定义一个接口
既然是面向接口编程,那么肯定要先有一个接口。

public interface Inter {
    /**
     * 定义一个方法
     * @param s
     */
    void function(String s);
}

接口实现
示例代码如下:

public class ImpOne implements Inter {
    @Override
    public void function(String s) {
        System.out.println("This is ImpOne "+s);
    }
}

客户端代码
接下来,我们来看客户端是如何调用。示例代码如下:

public class Client {
    public static void main(String[] args) {
        Inter inter = new ImpOne();
        inter.function("测试接口");
    }
}

问题在哪里
我们看上面的代码,其实,只要是有 Java 基础的人,都知道这么写。但是问题出来哪里?
我们知道,其实接品的思想,有一个很重要的一点,就是”封装隔离”。在上述的代码中,客户端直接实例化了一个 ImpOne。也就是说,客户端直接知道了实现类。这显然不是我们想要的。那该如何解决?

简单工厂

解决方案

解决上述问题的一个方案就是简单工厂。那我们先来看一下简单工厂的定义:

提供一个创建对象实例的功能,而无须关心其具体实现。被创建实例的类型可以是接口、抽象类,也可以是具体的类。

分析上面的问题,我们不想要让客户端知道具体的实现类,那么,我们是不是可以创建一个类,而有这个类生成具体的实现类,然后再由客户端调用呢?那接下来我们就看如何实现。

简单工厂示例代码

1:定义接口

public interface Inter {
    /**
     * 定义一个方法
     * @param s
     */
    void function(String s);
}

接口实现
我们先写一个实现类,ImpOne.

public class ImpOne implements Inter {
    @Override
    public void function(String s) {
        System.out.println("This is ImpOne "+s);
    }
}

接下来再写一个实现类,ImpTwo.这个实现类的代码与 ImpOne 基本一样。

public class ImpTwo implements Inter {
    @Override
    public void function(String s) {
        System.out.println("This is ImpTwo "+s);
    }
}

工厂类
接下来,我们看看简单工厂的实现。实现代码如下:

public class SimpleFactory {
    /**
     * 根据类型,创建具体的实现类.
     * @param type
     * @return
     */
    public static Inter createInter(int type) {
        Inter inter = null;
        switch (type) {
            case 0:
                inter = new ImpOne();
                break;
            case 1:
                inter = new ImpTwo();
                break;

        }
        return inter;
    }
}

客户端实现
最后,我们看一下客户端的代码:

public class Client {
    public static void main(String[] args) {
        //通过工厂类,获取接口对象
        Inter inter = SimpleFactory.createInter(0);
        inter.function("测试接口");
    }
}

这样,就达到文首我们想要的结果。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值