从零玩转设计模式之简单工厂设计模式

简介: 从零玩转设计模式之简单工厂设计模式

简单工厂模式是一种创建型设计模式,用于创建单个对象.

它主要由以下3个部分组成:

工厂类(Factory):负责创建单个对象。

抽象产品(Product):定义产品的接口。

具体产品(Concrete Product):实现抽象产品接口,提供具体的产品。

下面是一个简单的例子,展示了如何使用简单工厂模式创建一个汽车:

/**
 * 抽象产品(Product) 定义产品 需要实现的功能
 */
public interface Car {
    void start();
}
/**
 * 工厂类(Factory):负责创建单个对象
 */
public class CarFactory {
    public static Car createCar(String carType) {
        if (carType.equals("宝马")) {
            return new BMW();
        } else if (carType.equals("兰博基尼")) {
            return new lamborghini();
        } else {
            return null;
        }
    }
}
/**
 * 具体实现(Concrete Product) 创建车辆 
 */
public class BMW implements Car{
    @Override
    public void start() {
        System.out.println("启动宝马");
    }
}
/**
 * 启动车辆
 */
public class Client {
    public static void main(String[] args) {
        Car car = CarFactory.createCar("宝马");
        car.start();
        Car car1 = CarFactory.createCar("兰博基尼");
        car1.start();
    }
}

总结: 简单的说就是把创建对象交给工厂客户端就不需要自己new直接根据某类型直接拿即可

但是这违背了开闭原则

什么是开闭原则?

开闭原则是面向对象设计中的一项基本原则,指对扩展开放,对修改关闭。

它的主要目的是为了保护软件的可扩展性和可维护性,避免在修改软件的过程中对其他部分造成影响。

开闭原则的主要内容有以下几点:

对扩展开放:软件应该具有良好的扩展性,在不修改原有代码的情况下可以扩展新的功能。

对修改关闭:软件应该具有良好的稳定性,在修改原有代码的情况下不会对其他部分造成影响。

开闭原则的优点:

1. 通过扩展已有的软件系统,可以提供新的行为,以满足对软件的新需求,使变化中的软件系统有一定的适应性和灵活性.。

2. 已有的软件模块,特别是最重要的抽象层模块不能再修改,这就使变化中的软件系统有一定的稳定性和延续性。

image-1670470107251.png

开闭原则可以通过以下几种方式来实现:

将具体实现和抽象接口分离:通过使用抽象接口隔离具体实现,可以让软件在不修改原有代码的情况下扩展新的功能。

  1. 使用多态:通过多态的方式来实现抽象接口和具体实现之间的绑定,可以在运行时动态绑定,实现软件的扩展性。
  2. 使用模板方法:通过模板方法将算法的步骤固定,而具体实现由子类实现,实现软件的扩展性。
  3. 通过开闭原则的实现,
  4. 使用反射:通过客户端传递的对象字节码来创建实例,这样子就不需要进行修改原始工厂代码
/**
     * 使用反射实现开闭原则
     */
    public static <T> Car createCarOpen(Class<T> tClass) {
        Car car = null;
        try {
            Object instance = Class.forName(tClass.getName()).newInstance();
            if (instance instanceof Car) {
                car = (Car) instance;
            }
        } catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) {
            throw new RuntimeException(e);
        }
        return car;
    }

简单工厂在源码中的应用

JDk当中Calendar实例的创建

image-1670474294738.png



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