Factory Pattern & Abstract Factory Pattern & Factory Method Pattern如何区别各自的思想和联系?

Patrick_DK 2002-03-21 03:55:47
一口气看了3个模式,搞得有点晕了,哪位大虾来理清一下它们各自的思想以及应用上的联系呢?最好能附带简短的程序例子。
...全文
150 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
supersonics 2002-03-22
  • 打赏
  • 举报
回复
例子还是自己去看Design Pattern好了,当然没有java版的例子。
如果没有这本书,建议买一本,我买了这么多的书,
我觉得这是少数几本在很长时间内不会过时的书。
Patrick_DK 2002-03-22
  • 打赏
  • 举报
回复
to 落叶狂风:
“你说的在Desing Pattern上只是Factory模式的一个变形使用
(那本书上称为:参数化工厂方法)。”

这种参数化工厂方法是不是可以总结为“原料(参数)传入工厂,工厂输入产品(返回的对象实例)”呢?

还有,你说这是一个变形使用,那么原型呢?给个例子看看。



supersonics 2002-03-22
  • 打赏
  • 举报
回复
你说的在Desing Pattern上只是Factory模式的一个变形使用
(那本书上称为:参数化工厂方法)。
也许你说的使用if,else,switch是可以避免的,
我说过了,利用java的reflection特性可以做到这一点。
比如,在某个properties(xml)文件中定义classname,
然后,保证传入的参数在该配置文件中存在,
然后用class动态load的方法得到该class.
当然,这里又可以使用Singleton,prototype等等模式,
因为毕竟动态load class是一个“昂贵”的操作。
Patrick_DK 2002-03-21
  • 打赏
  • 举报
回复
我觉得仅仅用Factory Pattern,不能避免的要使用if/then或者swtich
因为虽然在Factory类的生产方法中返回的是一个抽象类型(抽象类或接口),而在具体的创建这个对象的时候,需要判断一下送进工厂的原料(参数),究竟是给那个具体的产品用的。

就象这个程序一样
//FactoryPattern.java
public class FactoryPattern
{
public static void main(String[] args)
{
if (args.length!=1)
{
System.out.println("Usage: java FactoryPattern [String name]");
System.exit(0);
}
try
{
new FactoryPattern().go(args[0]);
}
catch(Exception e)
{
e.printStackTrace();
}
}

public void go(String s) throws Exception
{
NamerFactory namerFactory=new NamerFactory();
Namer namer=namerFactory.getNamer(s);
System.out.println(namer.getClass());
System.out.println("Fist: "+namer.getFirst());
System.out.println("Last: "+namer.getLast());
}
}


class Namer
{
// a simple class to take a string apart into two names
protected String last; // store last name here
protected String first; // store first name here

public String getFirst()
{
return first;
}

public String getLast()
{
return last;
}
}


class FirstNamer extends Namer
{
// extracts first name from last name when separated by a space
public FirstNamer(String s)
{
int i=s.lastIndexOf(" ");
if (i>0)
{
first=s.substring(0,i).trim();
last=s.substring(i+1).trim();
}
else
{
first="";
last=s; // if no space, put all in last name
}
}
}


class LastNamer extends Namer
{
// extracts last name from first name when separated by a comma
public LastNamer(String s)
{
int i=s.indexOf(",");
if (i>0)
{
last=s.substring(0,i).trim();
first=s.substring(i+1).trim();
}
else
{
last=s; // if no comma, put all in last name
first="";
}
}
}


class NamerFactory
{
// Factory decides which class to return based on
// presence of a comma
public Namer getNamer(String entry)
{
int i=entry.indexOf(","); // comma determines name order
// 关键部分
if (i>0)
{
return new LastNamer(entry);
}
else
{
return new FirstNamer(entry);
}
}
}
supersonics 2002-03-21
  • 打赏
  • 举报
回复
Factory Pattern:动态创建一个或多个实现同一接口的产品。
Abstract Factory Pattern:动态创建一(或多)系列产品。
Factory Method:不清楚,还是让sharptop斑竹介绍一下吧。
sharetop 2002-03-21
  • 打赏
  • 举报
回复

哇 你上班时间还可以学习???你们的老板真大方,我要去你们那:)

23,407

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧