c# - 原型(prototype)模式,为什么需要接口(interface)?

标签 c# design-patterns interface prototype-pattern

我正在研究设计模式,目前我正在研究原型(prototype)模式。这个模式让我想知道,为什么我需要这个模式的接口(interface),没有接口(interface)我不能实现相同的功能吗?

我已经创建了两个例子,谁能解释一下为什么我需要这个接口(interface)?

接口(interface)示例:

这是我的接口(interface)类:

interface IWeapon
{
    IWeapon Clone();
}

我的具体类:

class Rifle : IWeapon
{

    public IWeapon Clone()
    {
        return (IWeapon)this.MemberwiseClone();
    }

}

克隆过程

 //Create rifle
 Rifle rifle = new Rifle();
 rifle.Name = "M4A1";
 rifle.Rounds = 30;

 //Copy Rifle
 Rifle rifleCopy = (Rifle)rifle.Clone();

这就是我在没有界面的情况下克隆的方式

public Rifle Clone()
{
   return (Rifle)this.MemberwiseClone();
}

谁能给我解释一下使用带有接口(interface)的实现相对于没有接口(interface)的实现的优势?

最佳答案

当你有做同样事情但使用不同方法来实现它的类时,接口(interface)是很棒的。

使用你的例子,假设我们有这样的东西......

public interface ILongRangeWeapon
{
    void Fire();
}

现在,假设您有这些类...

public class Rifle : ILongRangeWeapon
{
    public void Fire()
    {
        // Pull the trigger
    }
}

public class NuclearMissile : ILongRangeWeapon
{
    public void Fire()
    {
        // Press the red button
    }
}

现在您可以在您的代码中使用 ILongRangeWeapon,它使用哪种机制来开火并不重要,它只知道它可以开火。

更实际的应用是连接到互联网。有多种连接方式,调制解调器、局域网、wifi 等。但是,您根本不关心实例如何连接,您只需要它连接即可。

有些纯粹主义者说你应该让一切都成为界面。我认为它只是为了增加复杂性而在不需要的地方增加了复杂性。作为开发人员,您可以决定是否应该使用接口(interface)。

关于c# - 原型(prototype)模式,为什么需要接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21316316/

相关文章:

java - 通用记录方法

javascript - 与 Blazor 进行 JS 互操作时找不到窗口的属性

c# - 如何使用 JavaScript 为复选框事件使表的 "tr"可见?

c# - 使用 NLua 的 C# 类实例

java - SWT:使用附加的 ModifyListeners 同步更新字段的文本

Java - 从 HashMap 中获取正确转换的对象

c# - 如何访问 XML 电子表格格式?

c# - 设计用于 N 层应用程序的数据库

javascript - 是否可以使用 typescript 映射类型来创建接口(interface)的非函数属性类型?

go - 在 func 中定义本地类型和方法?