代码理解工厂模式【1】

⼯⼚模式是⼀种⾮常常⽤的创建型设计模式,其提供了创建对象的最佳⽅式。在创建对象时,不会对客户端暴露对象的创建逻辑,⽽是通过使⽤共同的接⼝来创建对象。其⽤来封装和管理类的创建,本质是对获取对象过程的抽象。
⼀般情况下,⼯⼚模式分为三种更加细分的类型:简单⼯⼚、⼯⼚⽅法和抽象⼯⼚。

假设我们有一个应用,它可以处理不同类型的文档。每种文档类型都有其特定的处理方式。我们将使用工厂模式来创建不同类型的文档处理器。

  1. 定义抽象产品
public interface Document {
    void process();
}
  1. 实现具体产品
public class WordDocument implements Document {
    @Override
    public void process() {
        System.out.println("Processing Word document...");
    }
}

public class PdfDocument implements Document {
    @Override
    public void process() {
        System.out.println("Processing PDF document...");
    }
}
  1. 创建简单工厂
public class DocumentFactory {
    // 使用 getDocument 方法获取不同类型的文档对象
    public static Document getDocument(String docType) {
        if (docType == null) {
            return null;
        }
        if (docType.equalsIgnoreCase("WORD")) {
            return new WordDocument();
        } else if (docType.equalsIgnoreCase("PDF")) {
            return new PdfDocument();
        }
        return null;
    }
}
  1. 最后,客户端代码使用工厂来获取具体的文档对象,并处理它:
public class FactoryPatternDemo {
    public static void main(String[] args) {
        Document document1 = DocumentFactory.getDocument("WORD");
        document1.process();

        Document document2 = DocumentFactory.getDocument("PDF");
        document2.process();
    }
}

在这个例子中,DocumentFactory是一个简单工厂,它根据传入的字符串参数决定创建哪种类型的文档对象。客户端代码不需要知道具体的文档处理逻辑,只需要通过工厂接口请求一个文档对象,然后调用其process方法。

这里提出一个问题?
如果现在又有新产品进来,实现完产品后还要到简单工厂加入对应的逻辑代码,如果有很多新产品,那么这样的处理是不是太麻烦?应该怎么解决呢?

⼯⼚类集合了所有产品的创建逻辑,职责过重,同时新增⼀个产品就需要在原⼯⼚类内部添加⼀个分⽀,违反了开闭原则。并且若是有多个判断条件共同决定创建对象,则后期修改会越来越复杂。因此引入抽象工厂,由于篇幅问题,见下一节。千万不要点

  • 17
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

miss writer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值