简单工厂模式 应用

一.简介

简单工厂模式(Simple Factory Pattern)属于类的创新型模式,又叫静态工厂方法模式(Static FactoryMethod Pattern),是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

将“类实例化的操作”与“使用对象的操作”分开,让使用者不用知道具体参数就可以实例化出所需要的“产品”类,从而避免了在客户端代码中显式指定,实现了解耦。

二.应用

我们通过手机的生产过程来演示简单工厂模式。

新建手机产品的接口及其实现类

/**
 * 手机接口
 */
public interface Phone {
    //拨打电话
    void call();
}


/**
 * 华为手机
 */
public class Huawei implements Phone{
    @Override
    public void call() {
        System.out.println("华为拨打电话");
    }
}


/**
 * 苹果手机
 */
public class Iphone implements Phone {
    @Override
    public void call() {
        System.out.println("iphone拨打电话");
    }
}


/**
 * 小米手机
 */
public class Xiaomi implements Phone{
    @Override
    public void call() {
        System.out.println("小米拨打电话");
    }
}

新建用来表示手机名称的枚举类

/**
 * 用来表示手机名称的枚举类
 */
public enum PhoneNameEnum {

    //iphone
    IPHONE("iphone"),
    //小米
    XIAOMI("xiaomi"),
    //小米
    HUAWEI("huawei");

    String name;

    PhoneNameEnum(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

}

新建生产手机产品的工厂类

/**
 * phone 的抽象工厂类
 * 提供了创建产品的接口,调用者通过它访问具体工厂的工厂方法 producePhone() 来创建手机产品。
 */
public abstract class AbstractPhoneFactory {
    //生产 phone
    public abstract Phone producePhone();
}

测试

public class Test {

    //简单工厂模式
    public static void main(String[] args) {
        PhoneFactory phoneFactory = new PhoneFactory();
        String huawei = "huawei";
        String xiaomi = "xiaomi";
        String iphone = "iphone";
        //这里提交了Java 一个很重要的特性---多态
        Phone huaweiPhone = phoneFactory.producePhone(huawei);
        huaweiPhone.call();
        Phone xiaomiPhone = phoneFactory.producePhone(xiaomi);
        xiaomiPhone.call();
        Phone iphonePhone = phoneFactory.producePhone(iphone);
        iphonePhone.call();
    }
}
华为拨打电话
iphone拨打电话
小米拨打电话

可以看到工厂类根据参数类型返回相应的手机类,但是如果以后我们要新增新的轿手机,比如三星,那么我们就得修改工厂类,加上对应的else if分支,这违反了开闭原则。
怎么优化呢? 可以用工厂模式,下节学习

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在OkHttp中,简单工厂模式被广泛应用于创建不同类型的拦截器。拦截器是OkHttp中非常重要的一部分,它们可以在请求和响应的不同阶段进行拦截和处理。OkHttp提供了一个Interceptor接口,用户可以通过实现该接口来创建自定义的拦截器。而简单工厂模式则可以帮助我们更方便地创建不同类型的拦截器。 具体来说,OkHttp中的拦截器分为两种类型:应用拦截器和网络拦截器。应用拦截器直接操作应用程序的请求和响应,而网络拦截器则操作OkHttp的请求和响应。在创建拦截器时,我们需要根据拦截器的类型来选择不同的创建方式。这时,简单工厂模式就可以派上用场了。 下面是一个简单的示例,演示了如何使用简单工厂模式创建不同类型的拦截器: ```java public class InterceptorFactory { public static Interceptor createInterceptor(InterceptorType type) { switch (type) { case LOGGING: return new LoggingInterceptor(); case AUTHENTICATION: return new AuthenticationInterceptor(); case CACHE: return new CacheInterceptor(); default: throw new IllegalArgumentException("Invalid interceptor type"); } } } public enum InterceptorType { LOGGING, AUTHENTICATION, CACHE } // 创建应用拦截器 Interceptor loggingInterceptor = InterceptorFactory.createInterceptor(InterceptorType.LOGGING); // 创建网络拦截器 Interceptor cacheInterceptor = InterceptorFactory.createInterceptor(InterceptorType.CACHE); ``` 在上面的示例中,我们首先定义了一个InterceptorFactory类,该类包含一个静态方法createInterceptor,用于根据传入的InterceptorType参数创建不同类型的拦截器。在createInterceptor方法中,我们使用了switch语句来根据不同的类型返回不同的拦截器实例。最后,我们可以通过调用createInterceptor方法来创建不同类型的拦截器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘德华一不小心就打代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值