简单工厂模式(SimpleFactory)

        简单工厂模式是23种模式中最简单的模式,主要用于对象的创建。该模式可以使客户端省去创建不同对象的代码,而把对象的创建交给专门的工厂类。需要注意的是使用这种模式创建的类必须继承自相同的类,否则无法返回创建的对象。工厂类提供一个静态的方法,通过传递不同的参数给这个方法来返回需要的对象。

        下边是简单工厂模式的示例代码,注意这段代码并没有让Fish类和Bird类继承同一个类,而是让他们都实现IAnimal接口,通过这个接口来取得创建的对象。

Fish类的代码:

public class Fish implements IAnimal {
    public Fish(){};
    public void eat(){
        System.out.println("Fishes must eat!");
    }
    public void swim(){
        System.out.println("Fish can swim!");
    }
}

Bird类的代码:

public class Bird implements IAnimal {
    public Bird(){}
    public void eat(){
        System.out.println("Birds must eat!");
    }
    public void fly(){
        System.out.println("Birds can fly!");
    }
}

IAnimal接口只是一个简单的方法的声明:

public interface IAnimal {
    public void eat();
}

最后给出AnimalFactory类的代码:

public class AnimalFactory {
    public static IAnimal returnAnimal(String animalName){
        if("fish".equals(animalName)){
            return new Fish();
        }else if("bird".equals(animalName)){
            return new Bird();
        }
        return null;
    }
}

下边测试简单工厂模式:

public class Test {
    public static void main(String[] args) {
        IAnimal fish=AnimalFactory.returnAnimal("fish");
        fish.eat();
        IAnimal bird=AnimalFactory.returnAnimal("bird");
        bird.eat();
    }
}

这边程序的输出是:

Fishes must eat!
Birds must eat!

测试成功!

        简单工厂模式使客户端不再负责对象的创建,而把这个工作交给专门的工厂类,这样既明确了分工,也使代码的编写更加的容易。但是简单工厂模式的缺点也是显而易见的,虽然客户端不在负责对象的创建,但是创建对象的代码并没有因此而减少,只是把他们集中在一个类的静态方法里边,当要创建的对象较多时,工厂类的代码会很长,而且都是一些相似的代码,就像上边列出的一样,创建Bird对象和创建Fish对象唯一的不同在于new后边的类名不一样。

        另外,当我们要给不同的类提供不同的初始值的时候,也就是说当类的构造函数需要不同数目或者不同类型的参数时,简单工厂模式就显示的力不从心了。简单工厂模式适用于要创建的对象比较简单的情形。需要注意的是,简单工厂模式使用了面向对象的多态性,这种多态性既可以使用类,也可使接口。

原文地址:https://www.cnblogs.com/sunzhenxing19860608/p/1585239.html