最近开始学习设计模式,在此做个笔记。
先从工厂模式学起,
工厂模式是专门负责将大量有共同接口的类实例化,而且不必事先知道每次是要实例化哪一个类的模式。
工厂模式有三种形态
简单工厂(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