C# 设计模式建议

2023-12-06

我有一个对象的集合。在这个集合中,我需要使用多个条件搜索对象的出现。 IE。

使用条件 1 进行搜索

如果条件 1 失败,则使用条件 2

如果条件 2 失败,则使用条件 3

如果条件 3 失败,则使用条件 4

这些条件中的每一个都由许多过滤器组成。

我正在寻找有关可维护的设计模式的建议。示例实现将不胜感激。


它看起来像责任链:

http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern

在面向对象设计中,责任链模式是 由命令对象源和一系列对象组成的设计模式 的加工对象。每个处理对象包含的逻辑 定义它可以处理的命令对象的类型;其余的是 传递到链中的下一个处理对象。还有一个机制 存在用于将新的处理对象添加到该链的末尾。

不要太执着于“命令对象”的事情。 CoR 模式的核心是它是一个对象链,这些对象要么自行处理工作,要么将其传递给链中的下一个对象。

执行:

public interface LinkInChain {
  boolean search(final Data data, final OnFound onFound);
}

public abstract class LinkInChainBase {
  final private LinkInChain nextLink;

  public LinkInChainBase(final LinkInChain nextLink) {
    this.nextLink = nextLink;
  }

  protected abstract innerSearch(final Data data, final OnFound onFound);

  public boolean search(final Data data, final OnFound onFound) {
    if (!innerSearch(data, onFound)) {
      return nextLink.search(data, onFound);
    }
  }
}

public class SearchFactory {

  private final LinkInChain lastLink = new LinkInChain() {
    public boolean search(final Data data, final OnFound onFound) {
      return false;
    }

  }

  public LinkInChain searchChain() {
    return new SearchUsingCond1(
      new SearchUsingCond2(
        new SearchUsingCond3(
          new SearchUsingCond4(
            lastLink
          )
        )
      )
    )
  }
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 设计模式建议 的相关文章

  • Scala 功能设计模式目录

    一周以来我一直在阅读 Scala 编程 作者一步一步地介绍了该语言的元素 但我仍然很困惑何时使用演员 闭包 柯里化等功能性的东西 我正在寻找功能结构的典型用例或最佳实践的目录 我并不是说在 Scala 中重新实现像 GoF 这样的众所周知的
  • 领域驱动设计和工厂类的作用

    我不清楚工厂类的角色和职责是什么 我知道工厂类应该负责创建域对象 聚合根 及其关联的实体和值对象 但我不清楚 DDD 架构的工厂 层 在哪里 工厂应该直接调用存储库来获取其数据还是服务库 工厂在以下框架中的位置 UI gt 应用程序 gt
  • 您网站上的自定义 jQuery 脚本有多少行代码?多少才算是太多呢?

    对于我们的网站 我使用了大量 jQuery 现在我正在查看基础库顶部的 340 行 jQuery 代码 多少是太多了 我将添加更多内容 我什么时候开始尝试压缩代码并最终转向 OOP 行数并不意味着什么 重要的是你实际上在做什么 您可能拥有
  • 空对象模式以避免空检查?

    最近 我遇到了空对象设计模式 我的同事说它可以用来消除整个代码中遇到的空指针检查 例如 假设 DAO 类返回有关 Customer 的信息 在名为 CustomerVO 的值对象中 我的主类应该提取名字和电子邮件 ID 并向客户发送电子邮件
  • 实现 PHP 单例:静态类属性还是静态方法变量?

    所以 我总是像这样实现一个单例 class Singleton private static instance null public static function getInstance if self instance null se
  • 领域驱动设计示例(特别是 .NET 重点)

    好的 我已经订购了 但是当我等待它到达时 我正在考虑开始在我当前的项目中应用这些技术 我现在确实很好地掌握了这些概念 但是当我尝试应用它们时 我陷入了执行过程中 最终在各个项目中漏掉了我的职责 因此 我正在寻找可以引导我走向正确方向的资源
  • C++ OOP:将哪些函数放入类中?

    假设我有一个a类 class a public void load data private void check data void work data void analyze data 这些函数都对类或其成员之一执行某些操作 然而这个
  • 如何在 Java 中创建具有相同类型参数的方法?

    我的代码如下所示 enum EnumType CATEGORY GROUP MAIN Methods public void call EnumType type switch type case CATEGORY return metho
  • 如何在C++中正确实现工厂方法模式

    C 中有这样一件事让我在很长一段时间内感到不舒服 因为老实说我不知道 该怎么做 尽管它听起来很简单 如何在 C 中正确实现工厂方法 目标 允许客户端使用工厂方法而不是对象的构造函数来实例化某个对象 而不会产生不可接受的后果和性能影响 我所说
  • 如何在javascript中实现观察者模式?

    你好 我正在尝试在 JavaScript 中实现观察者模式 我的index js document ready function var ironMan new Movie ironMan setTitle IronMan ironMan
  • 全局常量是反模式吗?

    我一直认为仅仅为了保持常量而创建一个类是一个糟糕的设计 但最近 我尝试用谷歌搜索它 发现只有一个界面作为常量是不好的反模式 没有提到使用一类常量 我认为 由于常量类实际上与全局变量没有太大区别 这就是我反对它并倾向于重构此类类的原因 它创建
  • 根据维基百科,为什么“call super”被视为反模式? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • java 中带有子类化的单例

    在 Java 中实现单例的最常见方法是使用私有构造函数和以下形式的公共访问器方法 public class Singleton private static Singleton instance null private Singleton
  • 丰富的领域模型和 ORM

    Martin Fowler 认为贫血领域模型是一种反模式 将持久性模型作为域模型进行滚动似乎也严重偏离 因为对象关系阻抗不匹配 http en wikipedia org wiki Object Relational impedance m
  • 访客模式如何不违反开放/封闭原则?

    来自维基百科 这个想法是 一旦完成 类的实现只能修改为 纠正错误 新的或更改的功能将需要创建不同的类 该类可以通过继承重用原始类的代码 据我了解 访问者模式是一种强大的技术 可以通过使用双重分派来遍历实现相同接口的相似但不同的对象 在我的一
  • 委托给子组件的模式

    在我正在工作的产品中 非常基本的场景之一是类的序列化 通常 要序列化的类会在其子组件上调用序列化 例如如果有一个类 s t 班级 A B C D 那么A Pack会调用pack B C D 上的函数 由于有很多这样的类 因此必须一遍又一遍地
  • DCI - 数据、上下文和交互 - MVC 的继承者?

    最好的描述是什么数据 上下文和交互 DCI http www gertrudandcope com a googlepages com thedciarchitecture将其推销给组织 它的创建者是特里格夫 雷恩斯考格 http folk
  • 用于在运行时使用附加信息增强 Java 中现有数据结构的设计模式

    我将从一个小例子开始 想象一个具有几个实体的应用程序 实体A 1 n gt 实体B 1 n gt 实体C 假设我们有一个返回 EnityC 实例列表的服务方法 在 UI 中 我们想要显示 EntityC 但也向仅与 UI 相关的实体添加一些
  • 微服务中的事务

    我读过一些关于微服务架构的文章 但没有人涉及事务的主题 他们都说这很难做到 也许有人可以描述如何处理这个问题 但不是从领域方面 而是从技术方面 假设我们有一个业务案例 我们需要调用两个不同的服务 并且它们都对数据库进行一些更改 但是如果第二
  • 如何用相同的方法“包装”两个类?

    我必须使用相同的方法处理两个类 但它们不实现相同的接口 也不扩展相同的超类 我无法 不允许更改此类 并且我不构造此类的实例 我只获取此类的对象 避免大量代码重复的最佳方法是什么 班级之一 package faa public class S

随机推荐