java 设计模式 工厂模式

什么是工厂模式

工厂模式(Factory Pattern)是一种创建型设计模式,它通过定义一个接口或抽象类来创建对象,但由子类决定具体实例化哪个类。简单来说,工厂模式将对象的实例化过程封装起来,客户端通过工厂方法来创建对象,而不需要直接使用 new 关键字。

工厂模式的目的是将对象的创建和使用解耦,使得客户端代码不需要关心具体对象的创建过程,尤其是对象的构造方式或者具体类型。

工厂模式的作用

  1. 解耦:客户端代码与具体的对象创建解耦,客户端只需要依赖工厂接口而不依赖具体的实现类。
  2. 代码重用:工厂方法可以提供统一的创建对象的逻辑,从而避免重复代码。
  3. 更好的扩展性:如果系统中需要新增不同的产品类,只需要添加新的工厂类即可,不需要修改原有的客户端代码。
  4. 灵活的对象管理:有些工厂模式可以实现对象的缓存或对象池,从而优化性能。

示例

不使用工厂模式获取实例

// 抽象产品:Button(按钮)
interface Button {
   
    void render();
}

// 具体产品:WindowsButton(Windows 按钮)
class WindowsButton implements Button {
   
    @Override
    public void render() {
   
        System.out.println("Rendering a Windows Button");
    }
}

// 具体产品:MacButton(Mac 按钮)
class MacButton implements Button {
   
    @Override
    public void render() {
   
        System.out.println("Rendering a Mac Button");
    }
}

// 客户端代码:根据操作系统类型选择不同按钮
public class Main {
   
    public static void main(String[] args) {
   
        Button button;
        String osType = "Windows";  // 假设从配置中获取操作系统类型

        if ("Windows".equalsIgnoreCase(osType)) {
   
            button = new WindowsButton();
        } else {
   
            button = new MacButton();
        }

        button.render();
    }
}

这里如果又新增一个liunx按钮 客户端又要重新修改代码

使用工厂模式

// 抽象产品:Button(按钮)
interface Button {
   
    void render();
}

// 具体产品:WindowsButton(Windows 按钮)
class WindowsButton implements Button {
   
    @Override
    public void render() {
   
        System.out.println("Rendering a Windows Button");
    }
}

// 具体产品:MacButton(Mac 按钮)
class MacButton implements Button {
   
    @Override
    public void render() {
   
        System.out.println("Rendering a Mac Button");
    }
}

// 具体产品:LinuxButton(Linux 按钮)
class LinuxButton implements Button {
   
    @Override
    public void render() {
   
        System.out.println("Rendering a Linux Button");
    }
}

// 抽象工厂:GUIFactory
interface GUIFactory {
   
    Button createButton();
}

// 具体工厂:WindowsFactory
class WindowsFactory implements GUIFactory {
   
    @Override
    public Button 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值