当前位置: 首页 > news >正文

苏州现代建设公司网站静态网站建设论文

苏州现代建设公司网站,静态网站建设论文,今天的新闻直播间,做安卓开发要去看哪些网站一、介绍抽象工厂模式是一种创建型设计模式#xff0c; 它能创建一系列相关的对象#xff0c; 而无需指定其具体类。问题假设你正在开发一款家具商店模拟器。 你的代码中包括一些类#xff0c; 用于表示#xff1a;一系列相关产品#xff0c; 例如 椅子Chair 、 沙发Sofa和…一、介绍抽象工厂模式是一种创建型设计模式 它能创建一系列相关的对象 而无需指定其具体类。问题假设你正在开发一款家具商店模拟器。 你的代码中包括一些类 用于表示一系列相关产品 例如 椅子Chair 、 沙发Sofa和 咖啡桌Coffee­Table 。系列产品的不同变体。 例如 你可以使用 现代Modern 、 维多利亚Victorian 、 装饰风艺术Art­Deco等风格生成 椅子 、 沙发和 咖啡桌 。你需要设法单独生成每件家具对象 这样才能确保其风格一致。 如果顾客收到的家具风格不一样 他们可不会开心。此外 你也不希望在添加新产品或新风格时修改已有代码。 家具供应商对于产品目录的更新非常频繁 你不会想在每次更新时都去修改核心代码的。解决方案首先 抽象工厂模式建议为系列中的每件产品明确声明接口 例如椅子、 沙发或咖啡桌。 然后 确保所有产品变体都继承这些接口。 例如 所有风格的椅子都实现 椅子接口 所有风格的咖啡桌都实现 咖啡桌接口 以此类推。接下来 我们需要声明抽象工厂——包含系列中所有产品构造方法的接口。 例如 create­Chair创建椅子 create­Sofa创建沙发和 create­Coffee­Table创建咖啡桌 。 这些方法必须返回抽象产品类型 即我们之前抽取的那些接口 椅子 沙发和 咖啡桌等等。那么该如何处理产品变体呢 对于系列产品的每个变体 我们都将基于 抽象工厂接口创建不同的工厂类。 每个工厂类都只能返回特定类别的产品 例如 现代家具工厂Modern­Furniture­Factory只能创建 现代椅子Modern­Chair 、 现代沙发Modern­Sofa和 现代咖啡桌Modern­Coffee­Table对象。客户端代码可以通过相应的抽象接口调用工厂和产品类。 你无需修改实际客户端代码 就能更改传递给客户端的工厂类 也能更改客户端代码接收的产品变体。假设客户端想要工厂创建一把椅子。 客户端无需了解工厂类 也不用管工厂类创建出的椅子类型。 无论是现代风格 还是维多利亚风格的椅子 对于客户端来说没有分别 它只需调用抽象 椅子接口就可以了。 这样一来 客户端只需知道椅子以某种方式实现了 sit­On坐下方法就足够了。 此外 无论工厂返回的是何种椅子变体 它都会和由同一工厂对象创建的沙发或咖啡桌风格一致。最后一点说明 如果客户端仅接触抽象接口 那么谁来创建实际的工厂对象呢 一般情况下 应用程序会在初始化阶段创建具体工厂对象。 而在此之前 应用程序必须根据配置文件或环境设定选择工厂类别。抽象工厂模式结构伪代码下面例子通过应用抽象工厂模式 使得客户端代码无需与具体 UI 类耦合 就能创建跨平台的 UI 元素 同时确保所创建的元素与指定的操作系统匹配。跨平台应用中的相同 UI 元素功能类似 但是在不同操作系统下的外观有一定差异。 此外 你需要确保 UI 元素与当前操作系统风格一致。 你一定不希望在 Windows 系统下运行的应用程序中显示 macOS 的控件。抽象工厂接口声明一系列构建方法 客户端代码可调用它们生成不同风格的 UI 元素。 每个具体工厂对应特定操作系统 并负责生成符合该操作系统风格的 UI 元素。其运作方式如下 应用程序启动后检测当前操作系统。 根据该信息 应用程序通过与该操作系统对应的类创建工厂对象。 其余代码使用该工厂对象创建 UI 元素。 这样可以避免生成错误类型的元素。使用这种方法 客户端代码只需调用抽象接口 而无需了解具体工厂类和 UI 元素。 此外 客户端代码还支持未来添加新的工厂或 UI 元素。这样一来 每次在应用程序中添加新的 UI 元素变体时 你都无需修改客户端代码。 你只需创建一个能够生成这些 UI 元素的工厂类 然后稍微修改应用程序的初始代码 使其能够选择合适的工厂类即可。// 抽象工厂接口声明了一组能返回不同抽象产品的方法。这些产品属于同一个系列 // 且在高层主题或概念上具有相关性。同系列的产品通常能相互搭配使用。系列产 // 品可有多个变体但不同变体的产品不能搭配使用。 interface GUIFactory ismethod createButton():Buttonmethod createCheckbox():Checkbox// 具体工厂可生成属于同一变体的系列产品。工厂会确保其创建的产品能相互搭配 // 使用。具体工厂方法签名会返回一个抽象产品但在方法内部则会对具体产品进 // 行实例化。 class WinFactory implements GUIFactory ismethod createButton():Button isreturn new WinButton()method createCheckbox():Checkbox isreturn new WinCheckbox()// 每个具体工厂中都会包含一个相应的产品变体。 class MacFactory implements GUIFactory ismethod createButton():Button isreturn new MacButton()method createCheckbox():Checkbox isreturn new MacCheckbox()// 系列产品中的特定产品必须有一个基础接口。所有产品变体都必须实现这个接口。 interface Button ismethod paint()// 具体产品由相应的具体工厂创建。 class WinButton implements Button ismethod paint() is// 根据 Windows 样式渲染按钮。class MacButton implements Button ismethod paint() is// 根据 macOS 样式渲染按钮// 这是另一个产品的基础接口。所有产品都可以互动但是只有相同具体变体的产 // 品之间才能够正确地进行交互。 interface Checkbox ismethod paint()class WinCheckbox implements Checkbox ismethod paint() is// 根据 Windows 样式渲染复选框。class MacCheckbox implements Checkbox ismethod paint() is// 根据 macOS 样式渲染复选框。// 客户端代码仅通过抽象类型GUIFactory、Button 和 Checkbox使用工厂 // 和产品。这让你无需修改任何工厂或产品子类就能将其传递给客户端代码。 class Application isprivate field factory: GUIFactoryprivate field button: Buttonconstructor Application(factory: GUIFactory) isthis.factory factorymethod createUI() isthis.button factory.createButton()method paint() isbutton.paint()// 程序会根据当前配置或环境设定选择工厂类型并在运行时创建工厂通常在初 // 始化阶段。 class ApplicationConfigurator ismethod main() isconfig readApplicationConfigFile()if (config.OS Windows) thenfactory new WinFactory()else if (config.OS Mac) thenfactory new MacFactory()elsethrow new Exception(错误未知的操作系统。)Application app new Application(factory)适用场景如果代码需要与多个不同系列的相关产品交互 但是由于无法提前获取相关信息 或者出于对未来扩展性的考虑 你不希望代码基于产品的具体类进行构建 在这种情况下 你可以使用抽象工厂。 抽象工厂为你提供了一个接口 可用于创建每个系列产品的对象。 只要代码通过该接口创建对象 那么你就不会生成与应用程序已生成的产品类型不一致的产品。 如果你有一个基于一组抽象方法的类 且其主要功能因此变得不明确 那么在这种情况下可以考虑使用抽象工厂模式。 在设计良好的程序中 每个类仅负责一件事。 如果一个类与多种类型产品交互 就可以考虑将工厂方法抽取到独立的工厂类或具备完整功能的抽象工厂类中。实现方式以不同的产品类型与产品变体为维度绘制矩阵。为所有产品声明抽象产品接口。 然后让所有具体产品类实现这些接口。声明抽象工厂接口 并且在接口中为所有抽象产品提供一组构建方法。为每种产品变体实现一个具体工厂类。在应用程序中开发初始化代码。 该代码根据应用程序配置或当前环境 对特定具体工厂类进行初始化。 然后将该工厂对象传递给所有需要创建产品的类。找出代码中所有对产品构造函数的直接调用 将其替换为对工厂对象中相应构建方法的调用。优缺点 你可以确保同一工厂生成的产品相互匹配。 你可以避免客户端和具体产品代码的耦合。 单一职责原则。 你可以将产品生成代码抽取到同一位置 使得代码易于维护。 开闭原则。 向应用程序中引入新产品变体时 你无需修改客户端代码。 由于采用该模式需要向应用中引入众多接口和类 代码可能会比之前更加复杂。与其他模式关系在许多设计工作的初期都会使用工厂方法模式 较为简单 而且可以更方便地通过子类进行定制 随后演化为使用抽象工厂模式、 原型模式或生成器模式 更灵活但更加复杂。生成器重点关注如何分步生成复杂对象。 抽象工厂专门用于生产一系列相关对象。 抽象工厂会马上返回产品 生成器则允许你在获取产品前执行一些额外构造步骤。抽象工厂模式通常基于一组工厂方法 但你也可以使用原型模式来生成这些类的方法。当只需对客户端代码隐藏子系统创建对象的方式时 你可以使用抽象工厂来代替外观模式。你可以将抽象工厂和桥接模式搭配使用。 如果由桥接定义的抽象只能与特定实现合作 这一模式搭配就非常有用。 在这种情况下 抽象工厂可以对这些关系进行封装 并且对客户端代码隐藏其复杂性。抽象工厂、 生成器和原型都可以用单例模式来实现。
http://www.hkea.cn/news/14269766/

相关文章:

  • 说明多媒体教学网站开发的一般步骤苏州网站关键词推广
  • 注册域名的网站津坤科技天津网站建设
  • 旅游网站建设成本核算哪个网站课件做的比较好
  • 网站定制开发特点网站建设分几种类型
  • 吐鲁番高端网站建设平台嘟嘟嘟在线观看播放免费
  • 商务网站设计与建设实训济南定制网站制作公司
  • 安全的企业网站开发阿里巴巴网站本土化建设
  • 电商网站建设好么南充 网站建设
  • 网站建设需求公司内部调查wordpress升级无法创建目录
  • 网站推广合同需要缴纳印花税吗权威网站建设公司
  • 网站推广交换链接全球设计学院排名
  • 网站后台上传文章顺义做网站的厂家
  • 南京太阳宫网站建设python做项目的网站
  • asp.net网站管理系统做网站要注意的
  • 可以打开所有网站的浏览器photoshop制作网站
  • 网站内容做淘宝店铺链接影响排名吗上海本市企业查询
  • 网站建设 架构建设开发有限公司网站
  • 南海建设局网站wordpress系统邮箱设置
  • 越秀区建设水务局网站wordpress网站排名
  • seo 整站优化wordpress centos安装
  • 男人是用什么做的视频网站十堰门户网站建设
  • 成都网站设计制作价格游戏推广赚佣金
  • 建设拍卖网站wordpress 页面设计
  • 网站策划的工作要求大连最好的网站制作公司
  • 网站备案怎么查询梧州零距离网论坛
  • 帮企业外卖网站做推网站软件开发招聘
  • 外贸英文网站设计搜索自定义关键词优化
  • 个人手机版网站app怎么做惠东网站设计
  • 做瞹瞹爱视频网站wordpress 定时任务
  • 天津做网站一般多少钱网站做统计