我正在研究"Head First Design Patterns“,我正试图将这些代码正确地转换为C#。这是我所拥有的。到目前为止,你能告诉我这是否是一个很好的实现/转换吗?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Duck
{
public abstract class Duck
{
public FlyBehavior flyBehavior;
public QuackBehavior quackBehavior;
public Duck(){
}
public abstract void display();
public void performFly()
{
flyBehavior.fly();
}
public void performQuack()
{
quackBehavior.quack();
}
public void swim()
{
Console.WriteLine("All ducks float, even decoys!");
}
}
public interface FlyBehavior
{
void fly();
}
public class FlyWithWings : FlyBehavior
{
public void fly()
{
Console.WriteLine("I'm flying!");
}
}
public class FlyNoWay : FlyBehavior
{
public void fly()
{
Console.WriteLine("I can't fly!");
}
}
public interface QuackBehavior
{
void quack();
}
public class Quack : QuackBehavior
{
public void quack()
{
Console.WriteLine("Quack");
}
}
public class MuteQuack : QuackBehavior
{
public void quack()
{
Console.WriteLine("<< Silence >>");
}
}
public class Squeak : QuackBehavior
{
public void quack()
{
Console.WriteLine("Squeak");
}
}
public class MallardDuck : Duck
{
public MallardDuck()
{
quackBehavior = new Quack();
flyBehavior = new FlyWithWings();
}
public override void display()
{
Console.WriteLine("I'm a real Mallard duck");
}
}
public class MiniDuckSimulator
{
public static void Main(string[] args)
{
Duck mallard = new MallardDuck();
mallard.performQuack();
mallard.performFly();
Console.ReadLine();
}
}
}发布于 2013-08-05 08:06:17
奇怪的是,在微软C#世界中,PascalCasing (相对于camelCasing)不仅适用于类,还适用于公共字段、公共方法和公共属性。
因此,您可能希望将Duck.flyBehavior重命名为Duck.FlyBehavior,将Duck.quackBehavior重命名为Duck.QuackBehavior,等等。
由于这些字段是公共字段,因此您可能需要将这些字段切换到C#属性,以防止需要添加清理输入的功能。
public FlyBehavior FlyBahavior
之后
public FlyBehavior FlyBehavior { get; set; }
虽然,我仍然以旧的方式编写C#,但是如果情况没有改变,我认为接口仍然以大写I作为前缀。所以您的FlyBehavior接口将被命名为IFlyBehavior。对于QuackBehavior来说,同样的事情;它将变成IQuackBehavior。
另一个迂腐的评论:虽然我有预感你已经知道这一点,但类应该在自己的档案*。我只是说,万一我的预感是错的,而你不知道。
*免责声明:我不太清楚为什么把类分离成文件是很重要的。我并不是说这不重要,只是如果你想知道为什么,恐怕我只能给你我自己的直觉,为什么我认为把类分成自己的文件是很重要的。
https://codereview.stackexchange.com/questions/29384
复制相似问题