设计模式-工厂模式

工厂模式是常用的设计模式之一,属于创建型模式,它提供了一种创建对象的最佳方式。

工厂模式提供了一种将对象实例化过程封装在工厂类中的方式。通过使用工厂模式,可以将对象的创建与使用代码分离。

在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

一般可以将工厂模式分为三种,分别为 简单工厂、工厂方法和抽象工厂。

简单工厂模式

简单工厂不算是一个真正的设计模式,而更像是一种我们的编程习惯,但是在平时编码中这不失为一个简单的方法,可以将客户程序从具体类解耦。

工厂类拥有一个工厂方法(create),接受了一个参数,通过不同的参数实例化不同的产品类。以生产汽车为例,如图所示:
在这里插入图片描述
抽象产品:创建汽车接口。

具体产品:创建宝马汽车和奔驰汽车类,实现汽车接口。

工厂类:根据传入参数的不同,创建不同的具体产品,返回值为抽象产品接口。

/**
 * 抽象产品接口
 */
public interface ICar {
   
   
    void run();
}
 
 
/**
 * 具体产品类 实现抽象接口
 */
public class Benz implements ICar{
   
   
 
    @Override
    public void run() {
   
   
        System.out.println("Benz is running");
    }
}
 
 
/**
 * 具体产品类 实现抽象接口
 */
public class BMW implements ICar {
   
   
 
    @Override
    public void run() {
   
   
        System.out.println("BMW is running");
    }
}
 
/**
 * 简单工厂(静态工厂)
 *建立一个工厂类,对实现了同一接口的一些类进行实例的创建。
 *优点是比较好理解,简单易操作。
 *缺点是类的创建依赖工厂类,如果想要拓展程序,必须对工厂类进行修改,这违反了设计模式的开闭原则(OCP),即对扩展开放,对修改关闭。
 */
public class CarSimpleFactory {
   
   
 
    public static ICar create(String type){
   
   
        if(type.equals("BMW")){
   
   
            return  new BMW();
        } else if (type.equals("Benz")) {
   
   
            return new Benz();
        }
        return null;
    }
}
 
/**
 * 客户端调用测试
 */
public class Client {
   
   
    public 

相关推荐

  1. 设计模式工厂模式

    2023-12-30 15:16:02       69 阅读
  2. 设计模式--工厂模式

    2023-12-30 15:16:02       53 阅读
  3. 设计模式 工厂模式

    2023-12-30 15:16:02       42 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-30 15:16:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-30 15:16:02       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-30 15:16:02       82 阅读
  4. Python语言-面向对象

    2023-12-30 15:16:02       91 阅读

热门阅读

  1. 在ubuntu上挂载QNX 镜像

    2023-12-30 15:16:02       61 阅读
  2. AJAX:整理1: 了解AJAX的相关知识

    2023-12-30 15:16:02       58 阅读
  3. Vue3.2 自定义指令详解与实战

    2023-12-30 15:16:02       63 阅读
  4. 猴子摘香蕉python

    2023-12-30 15:16:02       59 阅读
  5. 80 BFS和DFS两种方式解岛屿数量

    2023-12-30 15:16:02       59 阅读
  6. HTML5简介与基础骨架

    2023-12-30 15:16:02       61 阅读
  7. numpy数组追加元素

    2023-12-30 15:16:02       61 阅读
  8. Linux 命令 ifconfig 全面解析!

    2023-12-30 15:16:02       88 阅读
  9. git、gitee、github、gitlab 区别以及功能

    2023-12-30 15:16:02       69 阅读
  10. 一些与漏洞相关的面试题

    2023-12-30 15:16:02       47 阅读