手写Java设计模式之工厂模式,附源码解读

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一,这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

工厂模式提供了一种创建对象的方式,而无需指定要创建的具体类。

工厂模式属于创建型模式,它在创建对象时提供了一种封装机制,将实际创建对象的代码与使用代码分离。

以汽车生产为例,我们在生产汽车的时候,找到汽车加工厂,我们只需要给对方品牌信息,然后对方就可以生产出不同品牌的汽车,而不需要关注加工过程。

具体代码如下:

首先创建汽车的生产接口:

java 复制代码
public interface Car {
     void draw();
}

其次,分别让不同品牌实现汽车生产接口,后续如果需要增加新的品牌,仅需增加实现类即可,代码如下:

java 复制代码
public class XiaoMi implements Car {
    @Override
    public void draw() {
        System.out.println("生产小米汽车");
    }
}
java 复制代码
public class Tesla implements Car {
    @Override
    public void draw() {
        System.out.println("生产特斯拉");
    }
}
java 复制代码
public class HuaWei implements Car {
    @Override
    public void draw() {
        System.out.println("生产问界汽车");
    }
}

增加一个汽车工厂,按照不同品牌生产汽车:

java 复制代码
public class CarFactory {
    
    public Car getCar(String CarType){
        if(CarType == null){
            return null;
        }
        if(CarType.equalsIgnoreCase("XiaoMi")){
            return new XiaoMi();
        } else if(CarType.equalsIgnoreCase("HuaWei")){
            return new HuaWei();
        } else if(CarType.equalsIgnoreCase("Tesla")){
            return new Tesla();
        }
        return null;
    }
}

最后,实现调用(生产):

java 复制代码
public class CarTest {
    public static void main(String[] args){
        CarFactory carFactory = new CarFactory();
        carFactory.getCar("xiaomi").draw();
        carFactory.getCar("huawei").draw();
        carFactory.getCar("tesla").draw();
    }
}

生成结果:

相关推荐
故事和你911 分钟前
蓝桥杯-2025年C++B组国赛
开发语言·软件测试·数据结构·c++·算法·职场和发展·蓝桥杯
执笔画流年呀6 分钟前
如何用Navicat来创建表
java·mysql
王忘杰10 分钟前
0基础CUDA炼丹、增加断点保存,从零开始训练自己的AI大模型 87owo/EasyGPT Python CUDA
开发语言·人工智能·python
好家伙VCC13 分钟前
**发散创新:基于以太坊侧链的高性能去中心化应用部署实战**在区块链生态中,*
java·python·去中心化·区块链
邂逅星河浪漫16 分钟前
【JavaScript】==和===区别详解
java·javascript·==·===
kvo7f2JTy17 分钟前
吃透Linux/C++系统编程:文件与I/O操作从入门到避坑
java·linux·c++
Lzh编程小栈17 分钟前
数据结构与算法之队列深度解析:循环队列+C 语言硬核实现 + 面试考点全梳理
c语言·开发语言·汇编·数据结构·后端·算法·面试
_MyFavorite_17 分钟前
JAVA重点基础、进阶知识及易错点总结(35)注解与反射
java·开发语言·tomcat
AbandonForce20 分钟前
模拟实现vector
开发语言·c++·算法
TON_G-T23 分钟前
useEffect为什么会触发死循环
java·服务器·前端