Simple Factory(Static factory)简单工厂模式-java设计模式1? 一、概念:?????? 简单工厂模式,就是一个应用
Simple Factory(Static factory)简单工厂模式-java设计模式1
? 一、概念:
?????? 简单工厂模式,就是一个应用声明了Factory对象,然后传入参数,Factory根据参数判断决定返回那个子类对象。
??? ? 这些子类通常具有共同的父类和共同的方法,但是不同的类执行的任务个不相同。
? 二、示例模型:
?下面是James W.Cooper著的《Java Design Patterns A Tutorial》举的一个经典例子,支持“Jerome Cen”和"Cen,Jerome"姓名格式输入和计算输出的程序:
??
三、重点解析示例:?其中 Namer为Public的基类。FirstLast用String类的lastIndexOf(""),substring()方法给first,last赋值。LastFirst用String类的IndexOf(","),substring()方法给first,last赋值。NamerFactory用:
public class NamerFactory {
??? //Factory decides which class to return based on
??? //presence of a comma
??? public Namer getNamer(String entry) {
??????? //comma determines name order
??????? int i = entry.indexOf(",");??
??????? if (i > 0)
??????????? return new LastFirst(entry);
??????? else
??????????? return new FirstFirst(entry);
??? }
}
其关键就在NamerFactory中用了 int i = entry.indexOf(",");做了判断(根据参数及初始化基类的数据成员),用来决定返回的子类对象类型。
?在Person类中因为为一个基于AWT的支持输入和计算输出的组件,在Buttoncompute组件中注册了compute.AddActionListener(this);然后可以直接写public voidactionPerformed(ActionEvent e){
//用e.getSource==compute时,然后调用computeName()方法
}
? private void computeName() {
????? namer = nfactory.getNamer (entryField.getText());//工厂模式用工厂类参数判断返回的子类,而模型类作为子类的基类和工厂类的属性(聚合关系)。
????? txFirstName.setText(namer.getFirst ());//模型基类中声明的方法。
????? txLastName.setText(namer.getLast ());
? }
?实际上对用户屏蔽了具体调用的子类,在Simple Factory处为用户提供了统一的接口,得到基类的对象,用对象调用基类方法实现要求。
所以在学习J2SE API时提供不同类型参数的类,可以其实现就是由具体子类实现的,当然也能是类本身实现的。