代码如下﹕
1:Namer的实现
using System;
namespace NameFactory
{
public class Namer {
protected string frName, lName;
public string getFrname(){
return frName;
}
public string getLname() {
return lName;
}
}
} 2:FirstFirst类的实现
using System;
namespace NameFactory
{
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 = "";
}
}
}
}3:LastFirst类的实现
using System;
namespace NameFactory
{
public class LastFirst : Namer
{
public LastFirst(string name) {
int i = name.IndexOf (",");
if(i > 0) {
lName = name.Substring (0, i);
frName = name.Substring (i + 1).Trim ();
}
else {
lName = name;
frName = "";
}
}
}
} 4:NameFactory,工厂的实现
using System;
namespace NameFactory
{
public class NameFactory {
public NameFactory() {}
public Namer getName(string name) {
int i = name.IndexOf (",");
if(i > 0)
return new LastFirst (name);
else
return new FirstFirst (name);
}
}
}工厂类NameFactory 的getName方法为何要用Namer类名做关键字? 有何作用呢?
如果Namer不是类而是接口﹐又有何作用呢?
另﹕派生一个接口与派生一个类具体有什幺区别?
1:Namer的实现
using System;
namespace NameFactory
{
public class Namer {
protected string frName, lName;
public string getFrname(){
return frName;
}
public string getLname() {
return lName;
}
}
} 2:FirstFirst类的实现
using System;
namespace NameFactory
{
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 = "";
}
}
}
}3:LastFirst类的实现
using System;
namespace NameFactory
{
public class LastFirst : Namer
{
public LastFirst(string name) {
int i = name.IndexOf (",");
if(i > 0) {
lName = name.Substring (0, i);
frName = name.Substring (i + 1).Trim ();
}
else {
lName = name;
frName = "";
}
}
}
} 4:NameFactory,工厂的实现
using System;
namespace NameFactory
{
public class NameFactory {
public NameFactory() {}
public Namer getName(string name) {
int i = name.IndexOf (",");
if(i > 0)
return new LastFirst (name);
else
return new FirstFirst (name);
}
}
}工厂类NameFactory 的getName方法为何要用Namer类名做关键字? 有何作用呢?
如果Namer不是类而是接口﹐又有何作用呢?
另﹕派生一个接口与派生一个类具体有什幺区别?
---------------------------------------------------------------------
这句不是很明白如果Namer不是类而是接口﹐又有何作用呢?
---------------------------------------------------------------------
namer应该是接口。举dbFactory来说,dbFactory返回的应该是IDB的接口类型的,如IDbConnection,IDbTranction,至于使用的时候获取的实例究竟是sqlConnection还是oracleConnection调用方并不清楚。
工厂方法里必须这样才能创建产品实例
Namer可以理解为一个接口,它是你需要创建对象的抽象,它是一个类型,它的指针(引用)可以指向一个具体的类型(比如:FirstFirst)。这些具体的类型都有Namer的特性,即:getFrname和getLname这些公共方法。
==》如果Namer不是类而是接口﹐又有何作用呢?
效果一样,只是所有的实现需要在实现接口的类中显式实现,接口是类型,类是接口的实现,从严格的意义上来说两者的语意是不同的。但是一定要记住:接口就是类型。
==》另﹕派生一个接口与派生一个类具体有什幺区别?
类通常是一个类型的实例,接口更灵活,但是需要实现者做的事情也越多。在实现上两者的区别是:一个有实现(部分或者全部)一个没有任何实现。
答:做用是只要是Namer的子类都可以返回.这样当Namer子类有扩展时,上面调用这个方法的代码可以不用改变.
----------------------------------------------------------------------
问:如果Namer不是类而是接口﹐又有何作用呢?
答:接口能做到与此相同的作用.不过接口可以多继承,所以更灵活.
----------------------------------------------------------------------
问:派生一个接口与派生一个类具体有什幺区别?
答:派生自类一般表明"是"的概念,而派生自接口表明"具有"的概念.如:有个接口叫"名字",人和狗都可以派生自它(现在的狗一般都有名字了,呵呵),但有个类叫"职员",子类可以有"项目经理","程序员"等.选择接口和超类时可以这样思考.