asm, c, c++ are my all
-- Core In Computer
posts - 139,  comments - 123,  trackbacks - 0

    类可以提供一个公有的静态工厂方法,它用来返回这个类的实例,从而可以构造这个类的对象。

静态工厂方法的好处:

  1. 它与构造函数不同,静态工厂方法具有名字。这个好处可以帮助我们摆脱一个类只能有一个原型相同的构造函数的限制。举个例子来说:

public class A

{

pubilc int sum=0;

public int div=0;

public A(int a,int b)

{

sum=a+b;

// 利用 a b 在这里初始化 A 的实例

}

 

public A(int a,int b)          // 明显的错误

{

div=a/b;

}

}

就像上面代码所示,这么做是绝对不可能的,构造函数的签名只在参数上进行区分,如果我们想用同一种参数实现不同的构造函数,那么构造函数的局限性就肯定了它是做不到的。但是我们可以利用静态工厂方法来轻松解决这个问题:

public class A

{

public int sum=0;

public int div=0;

public static A Sum(int a,int b)

{

A a1=new A();

a1.sum=a+b;

return a1;

}

public static A Div(int a,int b)

{

A a1=new A();

a1.div=a/b;

return a1;

}

}

很明显,我们可以用相同的参数来构造不同的对象了,如:

A a1=A.Sum(5,5);

A a2=A.Div(5,5);

我们做了什么一幕了然。当然这个例子可能有些不伦不类,但是在这里仅仅想说明这个问题,很极端但是很明确。

  1. 静态工厂方法每次被调用的时候,不要求非得创建一个新的对象。有的时候我们仅仅需要这个类所表示某些项,但是不需要这个类的实例,那么静态工厂方法可以很好的满足这个要求。
  2. 静态工厂方法可以返回一个原返回类型的子类型的对象。

静态工厂方法的缺点:

  1. 类如果不含公有的或者受保护的构造函数,就不能被子类化。对于公有的静态工厂所返回的非公有类,也是同样的。如果一个类没有共有的或者受保护的构造函数,那么这个类就不能被继承。
  2. 静态工厂方法与其他的静态方法没有任何区别。 API 文档中,它们不会像构造函数那样被明确标识出来。
posted on 2006-10-18 23:11 Jerry Cat 阅读(1398) 评论(2)  编辑 收藏 引用

FeedBack:
# re: 创建和销毁对象--考虑用静态工厂方法代替构造函数
2006-10-18 23:13 | Jerry Cat
不知here有没有南京的兄弟, 我以前南京的一个同学赵小姐要我帮忙发个租房消息, 某虽不懂但老同学的事也不好推, 将就如下:

现有位于南京市江宁区"武夷花园"小区的三室一厅住房一套, 水,电,气齐全, 室内有热水器, 电视机及床, 衣柜等简单家具. 整租, 与人合租均可. 联系人: 赵小姐 电话:025-83909202  回复  更多评论
  
# re: 创建和销毁对象--考虑用静态工厂方法代替构造函数
2008-07-20 10:44 | xuxiaoguang
public class A

{

pubilc int sum=0;

public int div=0;

public A(int a,int b)

{

sum=a+b;

// 利用 a 和 b 在这里初始化 A 的实例

div=a/b; //实际上参数个数和类型相同,就可以使用同一个构造函数

}


}

  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理



<2006年10月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

常用链接

留言簿(7)

随笔档案

最新随笔

搜索

  •  

最新评论

阅读排行榜

评论排行榜