Java 设计模式1-简单工厂模式

简单工厂模式不属于标准的Java 23设计模式之内。根据分类,简单工厂模式又分类为:1.普通简单工厂模式。2.多方法简单工厂模式。3.静态方法简单工厂模式。

1.普通简单工厂模式

先从最简单的普通简单工厂模式开始,工厂模式就是用来进行类的实例化,对实现了同一接口的类进行类的实例化。

公共的接口

public interface Animal {
    void eat();
}

类实现公共的接口

public class Dog implements Animal{

    @Override
    public void eat() {
        // TODO Auto-generated method stub
        System.out.println("Dog eat");
    }

}
public class Cat implements Animal{

    @Override
    public void eat() {
        // TODO Auto-generated method stub
        System.out.println("Cat eat");
    }

}

工厂类,用来创建实例


public class AnimalFactory {

    public Animal makeAnimal(String type) {

        if (type.equals("dog")) {
            return new Dog();
        } else if (type.equals("cat")) {
            return new Cat();
        }
        return null;
    }

}

测试类


public class AnimalTest {

    public static void main(String[] args) {

        AnimalFactory animalFactory = new AnimalFactory();

        Animal cat = animalFactory.makeAnimal("cat");

        cat.eat();

        Animal dog = animalFactory.makeAnimal("dog");

        dog.eat();

    }
}

输出:

Cat eat
Dog eat

2.多方法简单工厂模式
接着,循序渐进,我们开始了解多方法简单工厂模式,为了避免在创建对象的时候传递错误字符串导致创建错误实例,我们改成不传递字符串的方式,在工厂类里面,有多个工厂方法来达到创建多个对象的目的。

1.修改工厂类

public class AnimalFactory {

    public Animal produceDog() {

        return new Dog();
    }

    public Animal producCat() {

        return new Cat();
    }

}

测试类修改:

public class AnimalTest {

    public static void main(String[] args) {

        AnimalFactory animalFactory = new AnimalFactory();

        Animal cat = animalFactory.producCat();

        cat.eat();

        Animal dog = animalFactory.produceDog();

        dog.eat();

    }
}

输出:

Cat eat
Dog eat

3.静态方法简单工厂模式

最后,我们开始了解静态方法简单工厂模式,为了不需要new 工厂类,我们在工厂类创建对象的方法改成静态调用。

1.修改工厂类

public class AnimalFactory {

    public static Animal produceDog() {

        return new Dog();
    }

    public static Animal producCat() {

        return new Cat();
    }

}

测试类

public class AnimalTest {

    public static void main(String[] args) {


        Animal cat = AnimalFactory.producCat();

        cat.eat();

        Animal dog = AnimalFactory.produceDog();

        dog.eat();

    }
}

输出:

Cat eat
Dog eat

综上所述:对比三种简单工厂模式,不难看出,第三种方式的优势最为明显,不需要担心在获取实例的时候传递错字符串,也避免了去写new 工厂类的繁琐,所以,一般情况下,我们会使用第三种方式。

你可能感兴趣的:(Java 设计模式1-简单工厂模式)