抽象工厂模式
修改上讲的代码
public interface IFactory{
BreadMaker CreateBread();
PizzaMaker CreatePizza();
}
public class BlackBreadFactory implements IFactory
{
@override
public BreadMaker CreateBread()
{
return new BlackBread();
}
@override
public PizzaMaker CreatePizza()
{
return new BlackPizza();
}
}
public class HoneyBreadFactory implements IFactory
{
@override
public BreadMaker CreateBread()
{
return new HoneyBread();
}
@override
public PizzaMaker CreatePizza()
{
return new HoneyPizza();
}
}
public class WhiteBreadFactory implements IFactory
{
@override
public BreadMaker CreateBread()
{
return new WhiteBread();
}
@override
public PizzaMaker CreatePizza()
{
return new WhitePizza();
}
}
GOF对于抽象工厂模式的定义是:“提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类”
抽象工厂模式适用于以下情况
- 一系列要独立于它的产品的创建,组合和表示时
- 一个系统要由多个产品系列中的一个来配置时
- 当强调一些列相关的产品对象的设计以便进行联合使用时
- 当要提供一个产品类库,而只要显示它们的接口而不是实现时。
反射技术
public static void main(String[] args){
try
{
Class<?> c = Class.forName("WhiteBreadFactory");
try{
breadFactory = (IFactory)c.newInstance();
pizzaMaker = breadFactory.CreatePizza();
pizzaMaker.GetPizza();
}
catch(Exception e){}
}
catch(ClassNotFoundException e)
{
}
}
可以根据用户的输入来改变字符串变量而达到实例化不同类的目的。
可以使用配置文件的方式,使得在编译后仍然可以改变具体要实例化哪个类。
反射技术可以避免if和switch使用的缺点,使程序的灵活性有了大幅度的提升。