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的支持输入和计算输出的组件,在Button compute组件中注册了compute.AddActionListener(this);然后可以直接写public void actionPerformed(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时提供不同类型参数的类,可以其实现就是由具体子类实现的,当然也能是类本身实现的。

你可能感兴趣的:(java设计模式)