设计模式-简单工厂

简介: 设计模式-简单工厂

设计模式-简单工厂


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

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


为什么要使用工厂模式:


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


简单工厂


简单工厂只有一个工厂,也一个产品基类,不同的产品可以继承这个产品基类。

image.png

简单工厂代码实现:

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 就是具体实例。

简单工厂的优缺点


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


参考资料


  • 简单工厂,工厂方法,抽象工厂


相关文章
|
4月前
|
设计模式 Java 数据库
小谈设计模式(2)—简单工厂模式
小谈设计模式(2)—简单工厂模式
|
4月前
|
设计模式 Java PHP
php设计模式--简单工厂模式(一)
php设计模式--简单工厂模式(一)
27 0
|
1月前
|
设计模式 XML Java
【一】设计模式~~~创建型模式~~~简单工厂模式(Java)
文章详细介绍了简单工厂模式(Simple Factory Pattern),这是一种创建型设计模式,用于根据输入参数的不同返回不同类的实例,而客户端不需要知道具体类名。文章通过图表类的实例,展示了简单工厂模式的结构、时序图、代码实现、优缺点以及适用环境,并提供了Java代码示例和扩展应用,如通过配置文件读取参数来实现对象的创建。
【一】设计模式~~~创建型模式~~~简单工厂模式(Java)
|
1月前
|
设计模式 uml C语言
设计模式----------工厂模式之简单工厂模式(创建型)
这篇文章详细介绍了简单工厂模式,包括其定义、应用场景、UML类图、通用代码实现、运行结果、实际应用例子,以及如何通过反射机制实现对象创建,从而提高代码的扩展性和维护性。
设计模式----------工厂模式之简单工厂模式(创建型)
|
1月前
|
设计模式 测试技术 Go
[设计模式]创建型模式-简单工厂模式
[设计模式]创建型模式-简单工厂模式
|
4月前
|
设计模式
设计模式-简单工厂和工厂方法
设计模式-简单工厂和工厂方法
|
3月前
|
设计模式 Java
Java设计模式:工厂模式之简单工厂、工厂方法、抽象工厂(三)
Java设计模式:工厂模式之简单工厂、工厂方法、抽象工厂(三)
|
3月前
|
设计模式 Java 编译器
设计模式——创建型模式(工厂,简单工厂,单例,建造者,原型)
设计模式——创建型模式(工厂,简单工厂,单例,建造者,原型)
|
3月前
|
设计模式 XML Java
【设计模式】第三篇:一篇搞定工厂模式【简单工厂、工厂方法模式、抽象工厂模式】
三 结尾 如果文章中有什么不足,欢迎大家留言交流,感谢朋友们的支持! 如果能帮到你的话,那就来关注我吧!如果您更喜欢微信文章的阅读方式,可以关注我的公众号
40 5
|
3月前
|
设计模式
简单工厂模式-大话设计模式
简单工厂模式-大话设计模式