连接: http://samwong.iteye.com/
Simple Factory模式又称Static Factory模式。一个Simple Factory生产成品,而对客户端隐藏产品产生的细节,物件如何生成,生成前是否与其它物件建立依赖关係,客户端皆不用理会,用以将物件生成方式之变化与客户端程式码隔离。
假设今天,您要建立一个Message物件,这个Message物件会有一连串的物件实例化与依赖关係建立流程:
<SPAN style="COLOR: #0000ff">Session session = someWhere.getSession();
Message msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(session.from));
msg.setSubject(session.subject);
msg.setText(session.text);
msg.setHeader(session.headerName, session.headerValue);
msg.setDate(session.date);
...
mailService.send(msg);</SPAN>
Session session = someWhere.getSession();
Message msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(session.from));
msg.setSubject(session.subject);
msg.setText(session.text);
msg.setHeader(session.headerName, session.headerValue);
msg.setDate(session.date);
...
mailService.send(msg);
若这样的流程是固定的,您可以将以上的细节封装在一个类别中成为其静态方法:
public class MessageFactory {
public static Message getMessage(Session session) {
Message msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(session.from));
msg.setSubject(session.subject);
msg.setText(session.text);
msg.setHeader(session.headerName, session.headerValue);
msg.setDate(session.date);
...
return msg;
}
}
对使用MessageFactory的客户端,可以这麽取得Message实例,而不用理会物件实例化与依赖关係建立的细节:
<SPAN style="COLOR: #0000ff">Session session = someWhere.getSession();
Message message = MessageFactory.getMessage(session);
mailService.send(message);</SPAN>
Session session = someWhere.getSession();
Message message = MessageFactory.getMessage(session);
mailService.send(message);
Simple Factory 的类别图如下所示:
UML类别图中,传回型态Product意指的是具有Product所定义之公开协定(物件上的公开方法)的物件,而不是专指Java中的interface定义。以Python来说,以下也是个Simple Factory的实现:
<SPAN style="COLOR: #0000ff">class Message:
def __init__(self, addr, msg):
self.addr = addr
self.msg = msg
def send(self):
print("send message '%s' to '%s'" % (self.msg, self.addr))
class MessageFactory:
def getMessage(addr, msg):
message = Message(addr, msg)
# 作一些有的没的
return message
msg = MessageFactory.getMessage("caterpillar@openhome.cc", "Hi")
msg.send()</SPAN>
class Message:
def __init__(self, addr, msg):
self.addr = addr
self.msg = msg
def send(self):
print("send message '%s' to '%s'" % (self.msg, self.addr))
class MessageFactory:
def getMessage(addr, msg):
message = Message(addr, msg)
# 作一些有的没的
return message
msg = MessageFactory.getMessage("caterpillar@openhome.cc", "Hi")
msg.send()
Python的变数没有型态,真正的型态资讯是在物件之上,就客户端的角度而言,要确定的是传回物件必然拥有send()公开方法。
Simple Factory使用静态方法来简单地隐藏物件建立细节。撇开静态方法不谈,隐藏物件建立的细节仍是Factory模式的重点,可将这个模式推至极緻,而成为一种通用、专门用来生成物件、建立依赖关係、甚至具备管理物件生命週期职责的轻量级容器。
参考:
samwong博客
http://samwong.iteye.com/
大小: 18.8 KB
查看图片附件
|