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

新加坡建设网站群晖怎样做网站

新加坡建设网站,群晖怎样做网站,wordpress 数据库连接文件,鞍山 网站建设抽象工厂抽象工厂设计模式是一种创建模式#xff0c;它提供了一个用于创建相关或从属对象族的接口#xff0c;而无需指定其具体类。 它在以下情况下特别有用#xff1a; 您需要创建必须一起使用并且是一致系列的一部分的对象#xff08;例如#xff0c;按钮、复选框和菜单…抽象工厂抽象工厂设计模式是一种创建模式它提供了一个用于创建相关或从属对象族的接口而无需指定其具体类。 它在以下情况下特别有用 您需要创建必须一起使用并且是一致系列的一部分的对象例如按钮、复选框和菜单等 GUI 元素。 您的系统必须支持多种配置、环境或产品变体例如浅色与深色主题、Windows 与 macOS 外观。您希望在相关对象之间强制保持一致性确保它们都是从同一个工厂创建的。 抽象工厂模式将 对象创建封装到工厂接口中。每个具体工厂实现接口并生成一组完整的相关对象。这可确保您的代码保持可扩展、一致并与特定产品实现松散耦合。 让我们通过一个真实世界的示例看看如何应用抽象工厂模式来构建一个灵活、可维护的系统并且能够在没有条件逻辑的情况下支持多个可互换的产品系列。问题特定于平台的 UI 假设你正在构建一个必须同时支持 Windows 和 macOS 的跨平台桌面应用程序。为了提供良好的用户体验您的应用程序应 为每个作系统呈现具有本机外观的 UI 组件例如按钮 复选框 文本字段 菜单 朴素实现条件 UI 组件实例化 在第一次尝试中您可以实现特定于平台的 UI 组件如下所示 Windows UI 元素public class WindowsButton implements Button {Overridepublic void paint() {System.out.println(Painting a Windows-style button.);}Overridepublic void onClick() {System.out.println(Windows button clicked.);} }public class WindowsCheckbox implements Checkbox {Overridepublic void paint() {System.out.println(Painting a Windows-style checkbox.);}Overridepublic void onSelect() {System.out.println(Windows checkbox selected.);} } MacOS UI元素 public class MacOSButton implements Button {Overridepublic void paint() {System.out.println(Painting a macOS-style button.);}Overridepublic void onClick() {System.out.println(MacOS button clicked.);} }public class MacOSCheckbox implements Checkbox {Overridepublic void paint() {System.out.println(Painting a macOS-style checkbox.);}Overridepublic void onSelect() {System.out.println(MacOS checkbox selected.);} }然后在应用程序逻辑中您最终会执行以下作 public class App {public static void main(String[] args) {String os  System.getProperty(os.name);if (os.contains(Windows)) {WindowsButton button  new WindowsButton();WindowsCheckbox checkbox  new WindowsCheckbox();button.paint();checkbox.paint();} else if (os.contains(Mac)) {MacOSButton button  new MacOSButton();MacOSCheckbox checkbox  new MacOSCheckbox();button.paint();checkbox.paint();}} }为什么这种方法会失败 虽然此设置适用于两个平台上的两个 UI 组件但随着应用的增长它很快就会成为一场噩梦。1. 与混凝土类紧密耦合您的主应用程序逻辑与特定于平台的类 等 紧密绑定。这意味着无论在何处创建 UI 组件都必须手动检查作系统。WindowsButtonMacOSCheckbox2. 无抽象或多态性不能笼统地处理按钮或复选框。没有像或可以使用的通用界面 。ButtonCheckbox3. 代码重复和重复每个特定于平台的块都复制了类似的逻辑——实例化按钮、复选框、菜单等。你将在整个代码库中重复此条件分支。4. 可扩展性问题当您添加新平台例如 Linux添加新组件例如、、TextFieldSliderMenuBar您必须为每个平台添加新的具体类修改代码中出现特定于平台的逻辑的每个位置破坏现有行为的风险5. 违反开放/关闭原则任何新的变体都需要修改现有代码。您的 UI 创建逻辑不开放扩展但对重大更改非常开放。我们真正需要什么 我们需要一种方法来按平台对相关组件按钮、复选框等进行分组将特定于平台的创建逻辑封装到工厂中以多态方式处理 UI 组件无论平台如何轻松添加新的 UI 元素系列而无需修改应用程序的核心逻辑这就是抽象工厂模式的用武之地。抽象工厂模式 抽象工厂模式提供了一个接口用于创建相关或依赖对象的族而无需指定其具体类。在我们的例子中我们想要创建一个 UI 组件系列如 、 、 等这些组件在不同平台例如 Windows 或 macOS上的外观和行为不同但向应用程序公开相同的界面。ButtonCheckboxTextField抽象工厂模式通过以下方式帮助我们实现这一目标定义抽象 UI 工厂接口例如 GUIFactory)为每个平台实施一个具体工厂例如 WindowsFactoryMacOSFactory)为每种类型的组件公开一组一致的接口例如 ButtonCheckbox)让客户端使用这些接口而无需担心特定于平台的实现类图  1. 抽象工厂 GUIFactory)定义用于 创建相关产品系列的通用接口。通常包括工厂方法如 、 、 等。createButton()createCheckbox()createTextField()客户端依靠此接口创建对象而无需知道其具体类型。2. 混凝土厂 WindowsFactoryMacOSFactory)实现抽象工厂接口。创建 属于特定系列或平台的具体产品变型。每个工厂都确保其生产的所有组件都是兼容的即属于同一平台/主题。3. 抽象产品 ButtonCheckbox)为 一组相关组件定义接口或抽象类。给定类型例如的所有产品变体都 将实现这些接口。WindowsButtonMacOSButton4. 混凝土产品 WindowsButtonMacOSCheckbox)实现抽象产品接口。包含 组件的特定于平台的逻辑和外观。5. 客户 Application)使用抽象工厂和抽象产品接口。完全不知道它正在使用的具体类——它只与工厂和产品接互。可以通过更改出厂方式切换整个产品系列例如从 Windows 切换到 macOS而无需接触 UI 逻辑。实现抽象工厂 让我们实现一个系统让我们的应用程序可以为 Windows 和 macOS 生成具有本机外观的 UI 组件按钮、复选框 而无需硬编码平台检查或复制逻辑。1. 定义抽象产品接口我们首先定义客户端使用的产品接口。Button public interface Button {void paint();void onClick(); }Checkbox public interface Checkbox {void paint();void onSelect(); }2. 创建具体产品类这些实现特定于平台的逻辑。Windows 组件 public class WindowsButton implements Button {Overridepublic void paint() {System.out.println(Painting a Windows-style button.);}Overridepublic void onClick() {System.out.println(Windows button clicked.);} }public class WindowsCheckbox implements Checkbox {Overridepublic void paint() {System.out.println(Painting a Windows-style checkbox.);}Overridepublic void onSelect() {System.out.println(Windows checkbox selected.);} }macOS 组件 public class WindowsCheckbox implements Checkbox {Overridepublic void paint() {System.out.println(Painting a Windows-style checkbox.);}Overridepublic void onSelect() {System.out.println(Windows checkbox selected.);} }public class MacOSCheckbox implements Checkbox {Overridepublic void paint() {System.out.println(Painting a macOS-style checkbox.);}Overridepublic void onSelect() {System.out.println(MacOS checkbox selected.);} }3. 定义抽象工厂这是用于创建相关产品系列的界面。 public interface GUIFactory {Button createButton();Checkbox createCheckbox(); }4. 实施混凝土工厂每个工厂都会创建特定于平台的组件变体。WindowsFactory public class WindowsFactory implements GUIFactory {Overridepublic Button createButton() {return new WindowsButton();}Overridepublic Checkbox createCheckbox() {return new WindowsCheckbox();} }MacOSFactory public class MacOSFactory implements GUIFactory {Overridepublic Button createButton() {return new MacOSButton();}Overridepublic Checkbox createCheckbox() {return new MacOSCheckbox();} }5. 客户端代码 – 仅使用抽象接口客户端代码根据作系统选择工厂并使用它来创建 UI 组件。 public class Application {private final Button button;private final Checkbox checkbox;public Application(GUIFactory factory) {this.button  factory.createButton();this.checkbox  factory.createCheckbox();}public void renderUI() {button.paint();checkbox.paint();} }6. 申请切入点输出在 macOS 上 Painting a macOS-style button. Painting a macOS-style checkbox.输出在 Windows 上 Painting a Windows-style button. Painting a Windows-style checkbox.我们取得了什么成就 平台独立性应用程序代码从不引用特定于平台的类 一致性按钮和复选框始终与所选作系统样式匹配 开放/封闭原则在不修改现有工厂或组件的情况下添加对 Linux 或 Android 的支持 可测试性和灵活性工厂可以轻松更换以进行测试或主题 其他资料 https://pan.baidu.com/s/1c1oQItiA7nZxz8Rnl3STpw?pwdyftc https://pan.quark.cn/s/dec9e4868381
http://www.zqtcl.cn/news/707157/

相关文章:

  • 北京手机版建站系统开发学网页设计需要什么学历
  • 英文网站备案互联网排名前十的公司2021
  • 网站外部外链建设如何开发wordpress主题
  • 个人网站首页内容辽宁省建设网站
  • 二建证从住房建设厅网站调出流程需求分析 网站
  • 鞋子网站模板做网站开发学什么软件
  • 网站建设的需求客户中企动力科技股份有限公司招聘
  • 小程序定制 seo营销seo托管公司
  • 杭州网站设计公司联系亿企邦网站建设在电访销售话术
  • 安康网站开发公司报价网站开发人员考核
  • 谷歌网站 百度清苑住房和城乡建设局网站
  • 南宁世尊商贸网站建设如何查看一个网站是否备案
  • h5手机网站怎么做搜索引擎关键词怎么选
  • 弱电网站源码工程造价建设信息网站
  • 村级网站模板做公司永久免费网站什么好
  • 厦门做网站培训安康市电梯公司
  • 江苏水利建设网站排行榜百度
  • 营销导向的企业网站优化wordpress制作企业
  • 株洲网站建设公司wordpress资讯类主题破解版
  • 网站导航栏设计要求wordpress直达按钮
  • 网站建设寻找可以途径网站制作的目的
  • 私募基金网站建设wordpress快讯插件
  • 无锡网站搜索引擎优化校园二级网站建设
  • 用vps刷网站流量要怎么做云主机开网站教程
  • 个体户经营异常如何网上解除深圳seo云哥
  • 网站建设科研申报书沧州网站建设定制价格
  • 家纺营销型网站wordpress演示数据
  • 中卫建设厅网站中国纪检监察报
  • 网站建设费如何核算如何给网站做权重
  • 东莞营销型高端网站建设网页专题设计