设计模式-简单工厂

设计模式-简单工厂

使用工厂方法模式可以应付我们遇到的大部分需求,当产品种类变多的时候,这个时候会出现大量的工厂类,怎么解决这个问题? 可以对产品树上类似的种类使用简单工厂模式来实现。也就是说 工厂方法+简单工厂= 抽象工厂。

使用设计模式,主要是为了程序的扩展性。

为什么要使用工厂模式:

  1. 编码时不能预见要创建哪些类的实例。
  2. 系统不应该依赖产品类如何被创建,组合和表达的细节。

简单工厂

简单工厂只有一个工厂,也一个产品基类,不同的产品可以继承这个产品基类。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uaf6I2En-1604811099373)(https://imgkr2.cn-bj.ufileos.com/bbb8a147-e103-45b8-9ac8-d9ca4aa738a3.png?UCloudPublicKey=TOKEN_8d8b72be-579a-4e83-bfd0-5f6ce1546f13&Signature=cTUJRZFv%252FwgxKk%252BxLtBwBgCTEh4%253D&Expires=1604895224)]

简单工厂代码实现:

public interface Product {
}
public class ConcreteProduct implements Product {
}
public class ConcreteProduct1 implements Product {
}
public class ConcreteProduct2 implements Product {
}

Client 需要如果包含实例化代码,这个是错误的:

public class Client {

    public static void main(String[] args) {
        int type = 1;
        Product product;
        if (type == 1) {
            product = new ConcreteProduct1();
        } else if (type == 2) {
            product = new ConcreteProduct2();
        } else {
            product = new ConcreteProduct();
        }
        // do something with the product
    }
}

需要把实例化代码放到简单工厂中:

public class SimpleFactory {

    public Product createProduct(int type) {
        if (type == 1) {
            return new ConcreteProduct1();
        } else if (type == 2) {
            return new ConcreteProduct2();
        }
        return new ConcreteProduct();
    }
}

客户端调用

public class Client {

    public static void main(String[] args) {
        SimpleFactory simpleFactory = new SimpleFactory();
        Product product = simpleFactory.createProduct(1);
        // do something with the product
    }
}

简单工厂模式很简单,适用于工厂类不经常更改的情况。

简单工厂包含的角色:

  • 工厂类角色:含有一定的业务逻辑和逻辑判断,根据逻辑不同,创建不同的产品。SimpleFactory 就是工厂类角色。
  • 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。通过接口或者抽象来实现 product 就是。
  • 具体产品角色: 工厂类所创建的对象就是此角色的实例。ConcreteProduct1 ConcreteProduct2 就是具体实例。

简单工厂的优缺点

  • 符合现实情况,客户端不创建产品,仅适用产品
  • 产品类符合开闭原则,产品扩展开放,工厂类的却不理想,每创建一个具体产品实例,都需要修改代码,因此便有了工厂方法法模式。

参考资料

欢迎关注公众号:程序员开发者社区

在这里插入图片描述

wangxiaoming CSDN认证博客专家 架构 Spring Boot Redis
博客是很好的总结和记录工具,如果有问题,来不及回复,关注微信公众号:程序员开发者社区,获取我的联系方式,向我提问,也可以给我发送邮件,联系 1275801617@qq.com
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页
实付 19.89元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值