《Java是如何快速煮成C#的?》(一):相似的方法(2)
在上篇《 Java是如何快速煮成C#的?》(一):相似的方法 》中,我们开启了C#与Java中的话题之一:相似的方法。本节我们再举例说明,到底有多相似。
我们用一个简单的工厂模式的例子说明,顺便复习下设计模式,呵呵。
首先邀月得补充一下:
1、语言对比:Java的文件名必须与类名匹配。在Java中,文件名必须遵循类的名称。在C#中,虽然通常如此,但不是必需的。在C#中,可以有两个class在一个文件中,并且从C#2.0开始,可能有一个Class跨越多个文件。
2、简单工厂(Simple Factory)模式
Simple Factory模式根据提供给它的数据,返回几个可能类中的一个类的实例。通常它返回的类都有一个公共的父类和公共的方法。
好了,我们看一个C#/Java的类图
就类图本身而言,除了String与string的大小写之外,并无区别。两个图均用Powerdesigner所画,只是依据模板分别为c#2.0和Java。
基类:Namer
派生类:FirstFirst和LastFirst均继承Namer
NameFactory实现了Namer的Create方法,在本例中为getName()。
代码对比如下:
Namer(C#):view plaincopy to clipboardprint?
using System;
namespace NameFactory
{
/// <summary>
/// Summary description for Namer.
/// </summary>
//Base class for getting split names
public class Namer
{
//parts stored here
protected string frName, lName;
//return first name
public string getFrname()
{
return frName;
}
//return last name
public string getLname()
{
return lName;
}
}
}
using System;
namespace NameFactory
{
/// <summary>
/// Summary description for Namer.
/// </summary>
//Base class for getting split names
public class Namer
{
//parts stored here
protected string frName, lName;
//return first name
public string getFrname()
{
return frName;
}
//return last name
public string getLname()
{
return lName;
}
}
}Namer(Java):
view plaincopy to clipboardprint?
package com.factory.SimpleFactory;
public class Namer {
protected String frName, lName;
//return first name
public String getFrname()
{
return frName;
}
//return last name
public String getLname()
{
return lName;
}
}
package com.factory.SimpleFactory;
public class Namer {
protected String frName, lName;
//return first name
public String getFrname()
{
return frName;
}
//return last name
public String getLname()
{
return lName;
}
}FirstFirst(C#):
view plaincopy to clipboardprint?
using System;
namespace NameFactory
{
/// <summary>
/// Summary description for FirstFirst.
/// </summary>
public class FirstFirst : Namer
{
public FirstFirst(string name)
{
int i = name.IndexOf(" ");
if (i > 0)
{
frName = name.Substring(0, i).Trim();
lName = name.Substring(i + 1).Trim();
}
else
{
lName = name;
frName = "";
}
}
}
}
using System;
namespace NameFactory
{
/// <summary>
/// Summary description for FirstFirst.
/// </summary>
public class FirstFirst : Namer
{
public FirstFirst(string name)
{
int i = name.IndexOf(" ");
if (i > 0)
{
frName = name.Substring(0, i).Trim();
&nb
补充:软件开发 , C# ,