【问题标题】:Is there such design pattern? How to call it?有这样的设计模式吗?怎么称呼它?
【发布时间】:2010-09-24 13:14:35
【问题描述】:

我有这样的设计:

public interface MyInterface {
    public abstract List<Sth> getSth();
}

public class MyConcreteImplementation implements MyInterface {
    private ConcreteSth mSth = new ConcreteSth();

    public List<Sth> getSth(){
        return mSth.getSth(additionalParams); 
    }
}

上面代码的目的是提供统一的方法被其他类调用。

这可以称为模式吗?如果有怎么命名?

【问题讨论】:

  • 谁在乎它叫什么?为什么你需要一个名字?你只是在使用一个接口来创建一个 API。
  • @Erick:当你希望你的同事使用一个名字时,你就会开始关心它。
  • @Erick:有共同的术语来讨论代码可能是一件相当有用的事情。能够为某事使用准确的名称可以减少由更冗长的描述引起的任何潜在歧义,并允许开发一种可用的速记。
  • 如果你总是在模式中谈论你的代码,你将只能与了解模式的人合作。如果您只是构建有意义的良好 API,那么任何程序员都可以理解它。此外,他们会想要使用它,因为它可以解决问题。我知道这种方法需要更多的个人责任。
  • @Erick:这个问题没有错。与 SO 中的其他一些问题相比,这与编程有很大关系。识别应用程序中的设计模式使读者更容易理解如何正确维护应用程序。对不起……但我真的不同意你的看法。

标签: java design-patterns naming-conventions wrapper provider


【解决方案1】:

在我看来,它就像 Adapter。它将ConcreteSth 适配为MyInterface

无论如何,如果它完成了您期望的工作,您应该询问它是否只是出于好奇。

【讨论】:

  • 我认为不需要能够告诉适配器它应该使用哪个 Adaptee。
  • @bozho - 你觉得我的回答怎么样? :)
  • @xtofl 我认为你应该这样做。否则它怎么知道适应什么?
  • 参见 Java 部分的示例:en.wikipedia.org/wiki/Adapter_pattern。不需要告诉适配器它使用哪个适配器。
  • 在 Java 部分。 LegacyLine、LegacyRectangle、Shape的代码
【解决方案2】:

您只是在这里遵循基本的面向对象设计。对我来说,这看起来很简单 Composition,如果您真的热衷于设计模式,我可以将其扩展为 delegate 的一种形式。

【讨论】:

  • 那么也许我们根本就不应该有设计模式。它们毕竟只是组合、关系等的组合......
  • 设计模式非常适合没有经验的程序员学习在面向对象设计中可以做哪些事情。将模式重新安装到您已经创建的用于解决问题的代码中是完全不同的事情。
  • 各位,关键在这里:“上面代码的目的是提供统一的方法来从其他类中调用。”听起来对我来说真的是一个适配器......
  • 在开始担心设计模式之前,您确实需要了解面向对象设计的基础知识 :)
  • 你假设我和 OP 不懂 OOD 的基础知识吗?
【解决方案3】:

Adapter

上面代码的目的是提供统一的方法被其他类调用。

这听起来真的很像适配器。你想让某个类适应你的界面。这里的接口是MyInterface,适配者是ConcreteSth

【讨论】:

    【解决方案4】:

    我将其称为适配器:它在现有接口(即ConcreteSth)周围包装了另一种方法(MyInterface.getSth),而不更改功能。

    【讨论】:

      【解决方案5】:

      工厂方法?

      工厂方法模式的本质是“定义一个用于创建对象的接口,但让子类决定实例化哪个类。工厂方法让一个类将实例化推迟到子类。”

      http://en.wikipedia.org/wiki/Factory_method_pattern

      【讨论】:

      • 那里没有创作。
      • 这不是工厂模式。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-15
      相关资源
      最近更新 更多