音乐播放器
scraty's Blog
 
文章 标签
9

Powered by Gridea | Theme: Fog

工厂方法设计模式

本文是对工厂方法设计模式的一个介绍。

工厂方法模式

工厂方法模式顾名思义就是创建一个“工厂”方法来隔离类的使用与具体的类。

对于

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) {...}
}