我的编程空间,编程开发者的网络收藏夹
学习永远不晚

使用web工厂方法的效果有哪些

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

使用web工厂方法的效果有哪些

本篇内容主要讲解“使用web工厂方法的效果有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“使用web工厂方法的效果有哪些”吧!

效果


工厂方法不再将与特定应用有关的类绑定到你的代码中。代码仅处理Product接口;因此它可以与用户定义的任何ConcreteProduct类一起使用。

编写可扩展代码经常做的一件事就是区分问题领域中共通的部分和该应用特定的部分并加以分离。特定部分最常见的入口就是创建对象的位置。工厂方法模式正好提供了一个可以将构建特定类的部分分离出来的方法。有了这个方法共通的部分只要面对Product接口编程即可,从结构上保证了共通代码可以和任何具象Product类一起工作。

工厂方法的一个潜在缺点在于客户可能仅仅为了创建一个特定的ConcreteProduct对象,就不得不创建Creator的子类。当Creator子类不必需时,客户现在必然要处理类演化的其他方面;但是当客户无论如何必须创建Creator的子类时,创建子类也是可行的。

A potential disadvantage of factory methods is that clients might have to subclass the Creator class just to create a particular ConcreteProduct object.Subclassing is fine when the client has to subclass the Creator class anyway, but otherwise the client now must deal with another point of evolution.

这一段的后半部分翻译不大好理解,和英文原文一起看。工厂方法使用Creator的子类创建ConcreteProduct对象。这是一个潜在的缺点。之所以说是潜在的是因为:如果这个Creator子类本来就是必须的,那么使用工厂方法并不会带来新的负担,一切都OK;否则的话,客户就必须处理演化的其他方面。这里《设计模式》的作者没说明其他方面具体指那些方面,作者猜想可能是指子类化Creator类所带来的负担吧。

下面是Factory Method模式的另外两种效果:
1 ) 为子类提供挂钩(hook)

用工厂方法在一个类的内部创建对象通常比直接创建对象更灵活。Factory Method给子类一个挂钩以提供对象的扩展版本。

在Document的例子中,Document类可以定义一个称为CreateFileDialog的工厂方法,该方法为打开一个已有的文档创建默认的文件对话框对象。 Document的子类可以重定义这个工厂方法以定义一个与特定应用相关的文件对话框。在这种情况下,工厂方法就不再抽象了而是提供了一个合理的缺省实现。

使用工厂方法在类内部创建对象有两个含义,首先是将创建对象的代码封装在一个成员函数中,然后是将这个函数声明为虚函数。这样就为派生类提供了选择扩展或者不扩展的灵活性。

2) 连接平行的类层次

迄今为止,在我们所考虑的例子中,工厂方法并不往往只是被Creator调用,客户可以找到一些有用的工厂方法,尤其在平行类层次的情况下。

构建ConcreteProduct的代码可以被Creator自己使用,有时也会被其他客户使用。特别是在平行类层次的结构中。

当一个类将它的一些职责委托给一个独立的类的时候,就产生了平行类层次。

这句话不大好理解,别着急接着看下面的例子。

考虑可以被交互操纵的图形;也就是说,它们可以用鼠标进行伸展、移动,或者旋转。

我们可以将图形的伸展,移动或者旋转看作图形类的一部分职责。

实现这样一些交互并不总是那么容易,它通常需要存储和更新在给定时刻记录操纵状态的信息,这个状态仅仅在操纵时需要。因此它不需要被保存在图形对象中。

上述交互操作的实现有一定难度,而且通常需要存储操作的状态。如果真的在各个图形类的内部实现会占据很大的篇幅。同时这些信息只是在操作是才需要,并不是各个图形类本质的部分。《设计模式》作者希望表的的应该是:将相互操作这部分职责委托出去的需求是确实存在的。

此外,当用户操纵图形时,不同的图形有不同的行为。例如,将直线图形拉长可能会产生一个端点被移动的效果,而伸展正文图形则可能会改变行距。

不同的图形对于伸展,移动或旋转的处理经常会不同。这里说的是对于不同的图形需要不同的处理类。

有了这些限制,最好使用一个独立的Manipulator对象实现交互并保存所需要的任何与特定操纵相关的状态。不同的图形将使用不同的Manipulator子类来处理特定的交互。得到的Manipulator类层次与Figure类层次是平行(至少部分平行),如下图所示。

使用web工厂方法的效果有哪些

这种图形类和Manipulaotr类之间的关系就是平行类。在这个例子中图形类将控制图形伸展,移动,旋转的这部分职责委托给了Manipulator类。

Figure类提供了一个CreateManipulator工厂方法,它使得客户可以创建一个与 Figure相对应的Manipulator。Figure子类重定义该方法以返回一个合适的Manipulator子类实例。做为一种选择,Figure类可以实现CreateManipulator以返回一个默认的Manipulator实例,而Figure子类可以只是继承这个缺省实现。这样的Figure类不需要相应的Manipulator子类 — 因此该层次只是部分平行的。注意工厂方法是怎样定义两个类层次之间的连接的。它将哪些类应一同工作工作的信息局部化了。

在这个例子中,通过Figure提供的CreateManipulator工厂方法建立了Figure类和Manipulator类之间的联系。

类似的,我们也可以为Figure类设计CreateSetupDialog工厂方法以建立Figure类和每种图形的设定画面之间的联系。

到此,相信大家对“使用web工厂方法的效果有哪些”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

使用web工厂方法的效果有哪些

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

使用web工厂方法的效果有哪些

本篇内容主要讲解“使用web工厂方法的效果有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“使用web工厂方法的效果有哪些”吧!效果工厂方法不再将与特定应用有关的类绑定到你的代码中。代码仅处理
2023-06-19

python中工厂方法有哪些应用场景

本篇文章给大家分享的是有关python中工厂方法有哪些应用场景,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。python主要应用领域有哪些1、云计算,典型应用OpenStack
2023-06-14

使用java工厂模式的好处有哪些

使用Java工厂模式的好处包括:解耦:工厂模式可以将对象的创建和使用分离,客户端只需要关注接口和抽象类,无需关心具体的实现类,降低了客户端和具体类的耦合度。可扩展性:通过工厂模式,可以方便地添加新的产品类,只需要增加对应的具体工厂类即可,无
使用java工厂模式的好处有哪些
2024-02-29

Web Services使用多态的方法有哪些

小编给大家分享一下Web Services使用多态的方法有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!在Web Services方法中,往往使用的都是一个具体类型的参数,这个参数一般就是一个数据对象。ASP.NET
2023-06-17

在什么情况下可以使用web工厂方法

这篇文章主要介绍了在什么情况下可以使用web工厂方法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇在什么情况下可以使用web工厂方法文章都会有所收获,下面我们一起来看看吧。适用性在下列情况下可以使用Factor
2023-06-19

web开发者使用的工具有哪些

本文小编为大家详细介绍“web开发者使用的工具有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“web开发者使用的工具有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。  一、Java 线上诊断工具 Art
2023-06-02

Python工作效率提升的方法有哪些

本篇内容主要讲解“Python工作效率提升的方法有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python工作效率提升的方法有哪些”吧!运行外部文件尝试在JupyterNotebook中运
2023-06-16

JS实现轮播图效果的方法有哪些

这篇文章主要讲解了“JS实现轮播图效果的方法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JS实现轮播图效果的方法有哪些”吧!Js实现轮播图01实现思路这可能是轮播图最简单点的实现之一
2023-06-25

vue过渡效果使用的技巧有哪些

本篇内容介绍了“vue过渡效果使用的技巧有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!概念在进入/离开的过渡中, 会有6个class的
2023-07-04

Redis命令行工具有哪些使用方法

这篇文章主要介绍“Redis命令行工具有哪些使用方法”,在日常操作中,相信很多人在Redis命令行工具有哪些使用方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Redis命令行工具有哪些使用方法”的疑惑有所
2023-06-04

安全工具netsh IPSec使用方法有哪些

小编给大家分享一下安全工具netsh IPSec使用方法有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!netsh ipsec 使用方法 在命令行下,通过ne
2023-06-08

GitHub的使用方法有哪些

这篇文章给大家分享的是有关GitHub的使用方法有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。GitHub是一个开源的托管服务,有点像代码的云。它以各种不同的编程语言托管您的源代码项目,并跟踪每次迭代所做的
2023-06-27

git使用的方法有哪些

本篇内容主要讲解“git使用的方法有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“git使用的方法有哪些”吧!安装git首先,需要在计算机上安装git。可以到git官网(https://gi
2023-07-06

css的使用方法有哪些

这篇文章将为大家详细讲解有关css的使用方法有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。css用法:1、当要在站点上所有或部分网页上一致地应用相同样式时,可使用外部样式表;2、当人们只是要定义当前
2023-06-14

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录