Java-設計模式(工廠模式)

工廠模式:
工廠這個對象通常就是一個用來創建其他對象的對象。
例如工廠通過使用一個人這個對象,如果我們需要一個男人,工廠就會幫我們創建一個男人;如果我們需要女人,就創建一個女人對象。
工廠模式又分爲:
普通工廠模式
多個工廠方法模式
靜態工廠方法模式

1、普通工廠模式

interface Animal{
    public void eat();
    public void sleep();
    public void beat();
}
class Dog implements Animal{

    @Override
    public void eat() {
        System.out.println("Dog can eat.");
    }

    @Override
    public void sleep() {
        System.out.println("Dog can sleep.");
    }

    @Override
    public void beat() {
        System.out.println("Dog can beat.");
    }
}
class Cat implements Animal{

    @Override
    public void eat() {
        System.out.println("Cat can eat.");
    }

    @Override
    public void sleep() {
        System.out.println("Cat can sleep.");
    }

    @Override
    public void beat() {
        System.out.println("Cat can beat.");
    }
}
class AnimalFac{
    public Animal createAnimal(String id){
        if(id.equals("dog")){
            return new Dog();
        }
        else if(id.equals("cat")){
            return new Cat();
        }
        else{
            System.out.println("Wrong input...");
            return null;
        }
    }
}

public class AnimalFactory {
    public static void main(String[] args){
        AnimalFac fac = new AnimalFac();
        Animal dog = fac.createAnimal("dog");
        dog.beat();
        dog.eat();
        dog.sleep();
    }
}

2、多個工廠模式(其實就是在工廠類改了一點)

interface Animal{
    public void eat();
    public void sleep();
    public void beat();
}
class Dog implements Animal{

    @Override
    public void eat() {
        System.out.println("Dog can eat.");
    }

    @Override
    public void sleep() {
        System.out.println("Dog can sleep.");
    }

    @Override
    public void beat() {
        System.out.println("Dog can beat.");
    }
}
class Cat implements Animal{

    @Override
    public void eat() {
        System.out.println("Cat can eat.");
    }

    @Override
    public void sleep() {
        System.out.println("Cat can sleep.");
    }

    @Override
    public void beat() {
        System.out.println("Cat can beat.");
    }
}
class AnimalFac{
//    public Animal createAnimal(String id){
//        if(id.equals("dog")){
//            return new Dog();
//        }
//        else if(id.equals("cat")){
//            return new Cat();
//        }
//        else{
//            System.out.println("Wrong input...");
//            return null;
//        }
//    }
    public Animal createDog(){
        return new Dog();
    }
    public Animal createCat(){
        return new Cat();
    }
}

public class AnimalFactory {
    public static void main(String[] args){
        AnimalFac fac = new AnimalFac();
        Animal dog = fac.createDog();
        dog.beat();
        dog.eat();
        dog.sleep();
        Animal cat = fac.createCat();
        cat.sleep();
        cat.eat();
        cat.beat();
    }
}

3、靜態工廠模式模式(main函數裏的聲明直接使用類去創建)

interface Animal{
    public void eat();
    public void sleep();
    public void beat();
}
class Dog implements Animal{

    @Override
    public void eat() {
        System.out.println("Dog can eat.");
    }

    @Override
    public void sleep() {
        System.out.println("Dog can sleep.");
    }

    @Override
    public void beat() {
        System.out.println("Dog can beat.");
    }
}
class Cat implements Animal{

    @Override
    public void eat() {
        System.out.println("Cat can eat.");
    }

    @Override
    public void sleep() {
        System.out.println("Cat can sleep.");
    }

    @Override
    public void beat() {
        System.out.println("Cat can beat.");
    }
}
class AnimalFac{
//    public Animal createAnimal(String id){
//        if(id.equals("dog")){
//            return new Dog();
//        }
//        else if(id.equals("cat")){
//            return new Cat();
//        }
//        else{
//            System.out.println("Wrong input...");
//            return null;
//        }
//    }
    public static Animal createDog(){
        return new Dog();
    }
    public static Animal createCat(){
        return new Cat();
    }
}

public class AnimalFactory {
    public static void main(String[] args){
        Animal dog = AnimalFac.createDog();
        Animal cat = AnimalFac.createCat();
//        AnimalFac fac = new AnimalFac();

//        Animal dog = fac.createDog();
        dog.beat();
        dog.eat();
        dog.sleep();
//        Animal cat = fac.createCat();
        cat.sleep();
        cat.eat();
        cat.beat();
    }
}

運行效果
在這裏插入圖片描述
總結:凡是出現了大量的產品需要創建,並且具有共同的接口時,可以通過工廠方法模式進行創建。在以上的三種模式中,第一種如果傳入的字符串有誤,不能正確創建對象,第三種相對於第二種,不需要實例化工廠類,所以,大多數情況下,我們會選用第三種——靜態工廠方法模式。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章