热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

工厂方法模式详解:莫勇鹏老师的深入解析与应用实例

2019年,独角兽企业高薪招聘Python工程师时特别关注工厂方法模式(FactoryMethodPattern)。该模式通过定义一个创建对象的接口,让子类决定实例化哪一个类。莫勇鹏老师深入解析了这一设计模式,并提供了丰富的应用实例,帮助开发者更好地理解和运用工厂方法模式,提升软件设计的灵活性和可扩展性。

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

Factory Method Pattern(工厂方法模式)

在工厂方法模式中,父类负责定义创建对象的公共接口,而子类则负责生成具体的对象,这样做的目的是将类的实例化操作延迟到子类中完成,即由子类来决定究竟应该实例化(创建)哪一个类。

 

工厂方法模式的UML类图

 

Product:产品角色

定义产品的接口。

 

ConcreteProduct:真实的产品

实现接口Product类。

 

Creator:工厂角色

声明工厂方法(FactoryMethod),返回一个产品。

 

ConcreteCreator:真实的工厂

实现FactoryMethod工厂方法,由客户调用,返回一个产品的实例。

 

Java实例——扩展了的手机工厂

 

手机接口:

public interface Mobile {

       public void call();

}

 

手机工厂接口:

public interface MobileFactory {

       public Mobile produceMobile();

}

 

摩托罗拉手机实现手机接口:

public class Motorola implements Mobile{

 

       @Override

       public void call() {

              // TODO Auto-generated method stub

              System.out.println("摩托罗拉手机");

       }

 

}

 

诺基亚手机实现手机接口:

public class Nokia implements Mobile{

 

       @Override

       public void call() {

              // TODO Auto-generated method stub

              System.out.println("诺基亚手机");

       }

 

}

摩托罗拉工厂实现了生产手机的方法,返回摩托罗拉手机:

public class MotorolaFactory implements MobileFactory{

 

       @Override

       public Mobile produceMobile() {

              // TODO Auto-generated method stub

              System.out.print("摩托罗拉工厂制造了");

              return new Motorola();

       }

 

}

 

诺基亚工厂实现了生产手机的方法,返回诺基亚手机:

public class NokiaFactory implements MobileFactory{

 

       @Override

       public Mobile produceMobile() {

              // TODO Auto-generated method stub

              System.out.print("诺基亚工厂制造了");

              return new Nokia();

       }

 

}

 

客户程序:

public class Client {

       public static void main(String args[]){

              MobileFactory mf;

              Mobile m;

              mf=new MotorolaFactory();

              m=mf.produceMobile();

              m.call();

              mf=new NokiaFactory();

              m=mf.produceMobile();

              m.call();

       }

}

 

输出结果:

摩托罗拉工厂制造了摩托罗拉手机

诺基亚工厂制造了诺基亚手机

 

应用情景:

1.      类不知道自己要创建哪一个对象。

2.      类用它的子类来指定创建哪个对象。

3.      客户需要清楚创建了哪一个对象。


转:https://my.oschina.net/mondchan/blog/41371



推荐阅读
  • 本文详细介绍了装饰者(Decorator)模式,这是一种动态地为对象添加职责的方法。与传统的继承方式不同,装饰者模式通过组合而非继承来实现功能扩展,从而提供更大的灵活性和可维护性。 ... [详细]
  • 本文整理了一系列Java面试问题,涵盖Java开发环境的分类、Java语言的核心特性、Linux环境下Java SE的安装步骤、常用的Java开发工具介绍,以及类与对象的基本概念等。 ... [详细]
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • Java 架构:深入理解 JDK 动态代理机制
    代理模式是 Java 中常用的设计模式之一,其核心在于代理类与委托类共享相同的接口。代理类主要用于为委托类提供预处理、过滤、转发及后处理等功能,以增强或改变原有功能的行为。 ... [详细]
  • NIO 通道接口详解
    本文介绍了NIO(New Input/Output)中的通道接口及其相关概念,包括通道的基本功能、接口设计以及各类通道接口的具体用途。通过本文,读者可以深入了解NIO通道的设计原理及其在实际项目中的应用。 ... [详细]
  • 本文介绍了如何利用Apache Digester库解决硬编码问题,通过创建自定义配置文件(如Struts配置文件)来动态调整应用程序的行为。文章详细描述了使用Apache Digester将XML文档转换为Java Bean对象的过程,并提供了具体的实现步骤。 ... [详细]
  • 本文介绍如何使用 Python 将一个字符串按照指定的行和元素分隔符进行两次拆分,最终将字符串转换为矩阵形式。通过两种不同的方法实现这一功能:一种是使用循环与 split() 方法,另一种是利用列表推导式。 ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • andr ... [详细]
  • Java编程实践:深入理解方法重载
    本文介绍了Java中方法重载的概念及其应用。通过多个示例,详细讲解了如何在同一类中定义具有相同名称但不同参数列表的方法,以实现更灵活的功能调用。 ... [详细]
  • Coursera ML 机器学习
    2019独角兽企业重金招聘Python工程师标准线性回归算法计算过程CostFunction梯度下降算法多变量回归![选择特征](https:static.oschina.n ... [详细]
  • 深入解析Spring启动过程
    本文详细介绍了Spring框架的启动流程,帮助开发者理解其内部机制。通过具体示例和代码片段,解释了Bean定义、工厂类、读取器以及条件评估等关键概念,使读者能够更全面地掌握Spring的初始化过程。 ... [详细]
  • 本文介绍了如何在VB.NET版机房收费系统中实现数据从DataGridView导出至Excel的功能,包括环境配置、代码实现及常见问题解决方法。 ... [详细]
author-avatar
大姑娘不再回_402
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有