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

web设计中抽象工厂的动机是什么

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

北京

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

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

看不清楚,换张图片

免费获取短信验证码

web设计中抽象工厂的动机是什么

今天小编给大家分享一下web设计中抽象工厂的动机是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

抽象工厂模式的动机

考虑一个支持多种视感( l o o k - a n d - f e e l)标准的用户界面工具包,例如 M o t i f和Presentation Manager。不同的视感风格为诸如滚动条、窗口和按钮等用户界面“窗口组件”定义不同的外观和行为。为保证视感风格标准间的可移植性,一个应用不应该为一个特定的视感外观硬编码它的窗口组件。在整个应用中实例化特定视感风格的窗口组件类将使得以后很难改变视感风格

《设计模式》成书很早,所以书中会出现许多过去的软件和技术,例如上文Moti和Presentation Manager。这里建议大家不必过分在意这些名词,能够理解作者意图即可。上面的文字中忽略例如的部分也不会有任何问题,只要能找到类似的场景就好,例如Linux操作系统的主题就是一个不错的例子。除了表示方式不同之外,动作方式也会有所不同。可以想象:如果将所有和主题相关的代码都写在一个类里,代码势必会变得很复杂,最后的结果就是得无法维护和扩展。

为解决这一问题我们可以定义一个抽象的 Wi d g e t F a c t o r y类,这个类声明了一个用来创建每一类基本窗口组件的接口。每一类窗口组件都有一个抽象类,而具体子类则实现了窗口组件的特定视感风格。对于每一个抽象窗口组件类, Wi d g e t F a c t o r y接口都有一个返回新窗口组件对象的操作。客户调用这些操作以获得窗口组件实例,但客户并不知道他们正在使用的是哪些具体类。这样客户就不依赖于一般的视感风格,如下页图所示。

web设计中抽象工厂的动机是什么

每一种视感标准都对应于一个具体的 Wi d g e t F a c t o r y子类。每一子类实现那些用于创建合适视感风格的窗口组件的操作。例如, M o t i f Wi d g e t F a c t o r y的C r e a t e S c r o l l B a r操作实例化并返回一个M o t i f滚动条,而相应的P M Wi d g e t F a c t o r y操作返回一个Presentation Manager的滚动条。客户仅通过Wi d g e t F a c t o r y接口创建窗口组件,他们并不知道哪些类实现了特定视感风格的窗口组件。换言之,客户仅与抽象类定义的接口交互,而不使用特定的具体类的接口。

面向对象中解决这类一问题的方法只有一个,就是利用多态,首先建立各种窗口组建的抽象类,然后在每种主题中为相应的组建准备具象类。上图中的Windows和ScrollBar就是窗口组建的抽象类,而PMWindow,MotiWindow,PMSrollBar,MotiScrollBar就是对应的具象类。

对于窗口组建的利用者Client来说,并不需要知道各个窗口组建的具象类,只有知道组件是某种Window或者某种ScrollBar即可。但是还有一个问题:Client在使用组件时虽然可以不知道组件具象类信息,但构建组件的时候无论如何也没有办法继续装糊涂。

解决这个问题想法就是将构建窗口组件的部分封装的到一个类中。名字可以叫WidgetFacroty,它根据主题信息生成对应的窗口组件,坏事交给别人做。这就是简单工厂模式。简单工程模式依然不够完美:因为当增加主题的时候,仍然需要对工厂类进行一定的修改。

终于到了主角出场的时候了。

这里继续请出面向对象的绝招:多态。我们可以准备一个工厂的抽象类,然后为每种主题准备具象类。每种具象工厂类负责生成对应主题的窗口组件。在需要更换主题时,更换具象工厂类即可。

Wi d g e t F a c t o r y也增强了具体窗口组件类之间依赖关系。一个 M o t i f的滚动条应该与M o t i f按钮、M o t i f正文编辑器一起使用,这一约束条件作为使用 M o t i f Wi d g e t F a c t o r y的结果被自动加上。

Client得到窗口组件的方式只有通过指定的具象工厂类一种方式,这样就从结果上决定了哪些具象窗口组建类一起协同工作。

以上就是“web设计中抽象工厂的动机是什么”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。

免责声明:

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

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

web设计中抽象工厂的动机是什么

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

下载Word文档

猜你喜欢

web设计中抽象工厂的动机是什么

今天小编给大家分享一下web设计中抽象工厂的动机是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。抽象工厂模式的动机考虑一
2023-06-19

Java中什么是抽象工厂

这篇文章将为大家详细讲解有关Java中什么是抽象工厂,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。抽象工厂模式1、什么是抽象工厂在现实生活中许多工厂是综合型的工厂,能生产多种类)的产品,就拿案例里面的可乐
2023-06-29

怎么理解Java设计模式的抽象工厂模式

这篇文章主要讲解了“怎么理解Java设计模式的抽象工厂模式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么理解Java设计模式的抽象工厂模式”吧!一、什么是抽象工厂模式为创建一组相关或相互
2023-06-25

PHP抽象工厂模式的优点与实现方法是什么

本篇内容介绍了“PHP抽象工厂模式的优点与实现方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!抽象工厂模式Abstract Fact
2023-07-05

举例讲解Python设计模式编程中对抽象工厂模式的运用

抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 优点:易于交换“产品系列”,只要更改相应的工厂即可。 缺点:建立产品的时候很繁琐,需要增加和修改很多东西。 优化1:为了避免客户端有过多的逻辑判断,可以封装
2022-06-04

web自动化平台开发元数据的设计方法是是什么

这篇“web自动化平台开发元数据的设计方法是是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“web自动化平台开发元数据的
2023-06-04

计算机中符合结构化程序设计要求的模块应该是什么

这篇文章主要介绍计算机中符合结构化程序设计要求的模块应该是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!符合结构化程序设计要求的模块应该是使用顺序、选择和重复(循环)三种基本控制结构表示程序的控制逻辑。结构化程序
2023-06-20

计算机网络中在程序设计时要对sp重新赋值的原因是什么

这篇文章主要介绍了计算机网络中在程序设计时要对sp重新赋值的原因是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。原因:系统复位后,SP内容为07H;如果不重新定义,则以0
2023-06-14

计算机中即可作为输入设备又可以作为输出设备的是什么

这篇文章主要讲解了“计算机中即可作为输入设备又可以作为输出设备的是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“计算机中即可作为输入设备又可以作为输出设备的是什么”吧!计算机中即可作为输
2023-06-25

计算机中采用什么技术使其能按人们的意志自动进行工作

小编给大家分享一下计算机中采用什么技术使其能按人们的意志自动进行工作,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!主要采用了存储程序控制。预先把指挥计算机如何进行
2023-06-15

计算机网络中当个人计算机以拨号方式接入因特网时必须使用的设备是什么

小编给大家分享一下计算机网络中当个人计算机以拨号方式接入因特网时必须使用的设备是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!当个人计算机以拨号方式接入因特网
2023-06-15

编程热搜

  • 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动态编译

目录