简单工厂虽然对产品生产提供了非常好的封装,但并没有遵循面向对象设计的”开放-关闭原则“,工厂方法模式可解决这个问题。
“开放-关闭原则”:对扩展开放、对修改关闭。什么意思呢?我的理解是:当我们要扩展新功能时,不需要修改原来的代码,简单的添加某个类、或继承某个抽象类、或实现某个接口就可以完成。
再看上篇中SimpleFactory这个工厂类,如果我们要新增一种输出设备(这是实际项目中肯定会面临的变化)则必须修改这个类,即添加一个if/else或switch/case语句。
下面是工厂方法模式:
public interface OutPut {}
public class Monitor implements OutPut {}
public class Print implements OutPut {}
public interface OutPutFactory {
OutPut createOutput();
}
public class MonitorFactory implements OutPutFactory {
public OutPut createOutput() {
return new Monitor();
}
}
public class PrintFactory implements OutPutFactory {
public OutPut createOutput() {
return new Print();
}
}
我们将原来的工厂类改为接口或抽象类型,然后将createOutput()方法中实际生产“设备”的if/else分支操作分解到抽象工厂类的各个具体子类工厂中去,将产品的生成交给子类工厂来完成。每个具体子类工厂负责完成一中产品的生产。
这时,如果我们想新增一种输出设备,如File,则完全不用修改原有的代码,将File实现OutPut接口,然后再添加一个生成这个产品的工厂FileFactory即可。
public class Main {
public static void main(String[] args) {
OutPutFactory factory = new PrintFactory();
output = factory.createOutput();
factory = new MonitorFactory();
output = factory.createOutput();
}
}
这样,我们就解决了“开放-关闭”问题,并且允许客户端随意消费产品。
工厂方法模式的关键在于:一个抽象产品类派生多个具体产品类、一个抽象工厂类派生多个具体工厂子类、每个具体工厂子类负责生产一种具体产品、客户端针对接口编程。
下一篇:抽象工厂
分享到:
相关推荐
### 抽象工厂模式(Abstract Factory Pattern) #### 引入 在探讨抽象工厂模式之前,我们先回顾一下之前介绍过的...在需要创建一组相关联对象且这些对象具有一定的共通性时,抽象工厂模式是一种非常实用的设计模式。
《白话设计模式》文档很可能是以通俗易懂的方式介绍设计模式的入门读物。 在软件开发过程中,设计模式可以帮助我们更有效地组织代码,提高代码的可读性和可维护性。设计模式通常分为三类:创建型、结构型和行为型...
在深度学习的模型搭建和训练过程中,我们可以看到许多OOP设计模式的应用。这些模式帮助我们更好地组织代码,提高可维护性和复用性。本资料包主要探讨了22种常见的设计模式,结合深度学习的实际场景进行解释。 1. ...
例如,工厂模式、单例模式、建造者模式属于创建型,适配器模式、装饰器模式属于结构型,而观察者模式、策略模式属于行为型。理解并熟练应用设计模式可以提高代码的可读性、可维护性和可扩展性。 2. **C++Templates....
Winform使用技巧,实战应用开发小系统参考资料,源码参考。经测试可运行。 详细介绍了一些Winform框架的各种功能和模块,以及如何使用Winform进行GUI开发、网络编程和跨平台应用开发等。 适用于初学者和有经验的...
java web开发,jsp,servlet框架,mysql,适合个人研究学习,用于毕业设计,课程设计等 java web开发,jsp,servlet框架,mysql,适合个人研究学习,用于毕业设计,课程设计等 java web开发,jsp,servlet框架,...
同时,该程序编写期间用了单例模式、工厂模式、模板模式等设计模式。为了游戏的可玩性,我们特意设计了平滑碰撞以及机器人。 项目结构 frame:包含如开始、游戏中、结束的JFrame main:包含程序入口和其它游戏控制 ...
3. **设计模式**:如果代码量较大,可能涉及到了面向对象的设计模式,如单例、工厂、观察者等,这些模式有助于代码的组织和复用。 4. **软件工程实践**:良好的代码结构、注释、模块化和面向接口的设计,都是软件...
- 了解常见的设计模式,如工厂模式、单例模式、观察者模式,以解决特定设计问题。 - 应用策略模式来封装算法,使代码更灵活和可扩展。 9. **命名空间**: - 使用命名空间避免全局作用域中的名字冲突。 - 使用`...
华为云IoT数据分析服务:助力华为南方工厂构建工厂数字孪生实践pdf 京东:数字孪生供应链白皮书 利用数字孪生技术, 实现高绩效制造 漫画白话数字孪生 让企业轻松构建数字孪生驱动的工业互联网云平台 数字孪生城市...
5. 设计模式:代码中可能会体现出一些常见的设计模式,如工厂模式、观察者模式等,显示了编程的规范化和灵活性。 6. 数据处理:如果项目涉及数据,那么数据的读取、清洗、分析和展示的代码将揭示团队的数据处理能力...
9. **设计模式**:虽然对于初学者来说可能较难,但可以初步接触一些常见的设计模式,如工厂模式、单例模式等,提升代码组织能力。 10. **调试技巧**:了解如何使用调试工具,如GDB,来查找和修复程序中的错误。 ...
对于源码阅读,理解设计模式,如工厂模式、单例模式、装饰器模式等,有助于我们更好地消化和运用开源项目。 在系统架构层面,大型公司的实践中,往往采用模块化、微服务化的设计思想,以提高系统的可扩展性和可维护...
在没有具体框架名的情况下,我们可以理解为这个系统可能采用了一些基本的Servlet组织模式,如单例模式、工厂模式等,以简化代码结构。 4. **毕业设计与课程设计作业**:这个项目适合于学生进行学习实践,通过实际...
- **设计模式**:项目中会广泛应用单例、工厂、代理等设计模式,提高代码的可读性和可维护性。 - **并发处理**:在高并发场景下,Java的并发工具类如Semaphore、CountDownLatch等会发挥关键作用,保证系统的高并发...
COLA(Clean Architecture On Layers,清洁分层架构)是一种软件架构模式,它强调将应用程序分为清晰的层次,每个层次都有明确的责任,以此来提高代码的可读性和可维护性。在COLA架构中,通常分为业务逻辑层、应用...