工厂方法设计模式
本文是对工厂方法设计模式的一个介绍。
工厂方法模式
工厂方法模式顾名思义就是创建一个“工厂”方法来隔离类的使用与具体的类。
对于
public interface Animal{...}
public class Cat implements Animal{...}
public class Dog implements Animal{...}
public class Duck implements Animal{...}
public class Donkey implements Animal{...}
...
我们一般使用的时候会这样:
Animal animal = new Dog();
Animal animal2 = new Duck();
创建一个工厂方法:
public Animal getAnimal(int feet) {
if(feet == 2) return new Duck();
if(feet == 4) return new Dog();
}
然后我们可以这样:
Animal animal = getAnimal(4);
Animal animal2 = getAnimal(2);
可以看到,我们将实例化这个过程封装到了工厂方法里,这就将实例化类的责任抛给了工厂方法,用户只需要提供对于“产品”的描述(甚至有时候不需要描述,如果用户不在意的话),就可以获得“产品”。
在这个例子里,用户只关心动物脚的个数,工厂方法满足了用户这个需要,让用户只需要提供脚的个数就可以帮助用户做出选择,返回默认的动物。如果想要更换这个动物的话,只需要修改工厂方法即可,不需要修改每个用到实例化的地方。
可以将工厂方法放在单独的工厂类中,例如:
public AnimalFactory{
public Animal getAnimal(int feet) {...}
}
也可以将工厂方法用static修饰,直接放到“产品”接口里,例如:
public interface Animal{
public static Animal getAnimal(int feet) {...}
}