最近开始学习设计模式,在此做个笔记。
   先从工厂模式学起,
   工厂模式是专门负责将大量有共同接口的类实例化,而且不必事先知道每次是要实例化哪一个类的模式。

工厂模式有三种形态  
    简单工厂(Simple Factory)模式
 工厂方法(Factory Method)模式,又称多形性工厂(Polymorphic Factory)模式
 抽象工厂(Abstract Factory)模式,又称工具箱(Kit或Toolkit)模式 

     简单工厂模式是由单个工厂类来决定到底应该实例化哪个子类,这个类扮演着“交通警察”的角色,它返回的类都具有共同的父类或者共同方法,当然它们执行内容不同。

    下面来看看一个例子。假设要建立一个登记表单,允许你按照不同的格式如:“名 姓” 或者“姓,名”录入姓名,我们希望能通过姓和名之间是否有逗号来确定姓名的顺序。

代码清单1: 姓名的基类
      public class Namer            //也可能是一个接口
      {
       protected String first;   //名
       protected String last;   //姓

      public String getFirst()
      {
         return this.first;   //返回名
      }

      public String getLast()
      {
           return this.last;     //返回姓
      }
    };


代码清单2;名在前的具体类

public class FirstFirst extends Namer
{
 public FirstFirst(String name)
 {
  int index=name.lastIndexOf(" ");   //查找分隔空格
  if(index>0)     //存在空格
  {
   last=name.substring(0,index);
   first=name.substring(index+1);
  }
  else         //不存在空格,名为空
  {
   first=name;
   last="";
  }
 }
};


代码清单3:   姓在前的具体类
public class LastFirst extends Namer
{
 public  LastFirst(String name)
 {
  int index=name.indexOf(",");
  if(index>0)
  {
   first=name.substring(0,index);
   last=name.substring(index+1);
  }
  else
  {
   first=name;
   last="";
  }
 }
};


代码清单4:   单一的工厂类

public class NameFactory
{
 public Namer getNamer(String entry)
 {
  int index=entry.indexOf(",");
  if(index>0)
  {
   return new LastFirst(entry);
  }
  else
   return new FirstFirst(entry);
 }
};

这样就构成了一个简单工厂模式,实际上更一般的简单工厂模式的架构如下.
public class Creator
{
    //创建工厂方法,一般根据参数来决定产生哪个产品
 public Product factory()
 {
  return new ConcreteProduct();
 }
}
//抽象产品
public interface Product
{
}
//具体的产品,一般有多个
public class ConcreteProduct implements Product
{
 public ConcreteProduct(){}
}

学了简单工厂模式,觉得本模式很容易理解,以前也用过,只是当时不知道而已。

参考文献:1.<<java设计模式>>
                 2.http://www.yesky.com/20011114/205122.shtml