工廠模式

概述:工廠模式顧名思義就是生產(chǎn)東西(對象)的一種設(shè)計(jì)模式,一般需要很多個(gè)且需使用復(fù)雜過程才能創(chuàng)建的對象(需要的對象數(shù)量很大,創(chuàng)建對象的過程復(fù)雜)。

代碼:生產(chǎn)動(dòng)物的工廠(例子不太恰當(dāng),哈哈)
動(dòng)物接口和具體動(dòng)物:

package com.example.java8.model.animal;
/**動(dòng)物接口*/
public interface Animal {
    String myName();
}

package com.example.java8.model.animal;
public class Cat implements Animal {
    @Override
    public String myName() {
        return "我是小貓咪,瞄瞄。";
    }
}

package com.example.java8.model.animal;
public class Dog implements Animal {
    @Override
    public String myName() {
        return "我是小狼狗,嗷嗷。";
    }
}

package com.example.java8.model.animal;
public class Panda implements Animal {
    @Override
    public String myName() {
        return "我是國寶,小熊貓。";
    }
}

動(dòng)物枚舉類(用于工廠生產(chǎn)時(shí),做范圍限制,保證是我有能力可以生產(chǎn)的)

package com.example.java8.model.animal;
/**動(dòng)物的枚舉類*/
public enum AnimalEnum {

    DOG(Dog.class),
    CAT(Cat.class),
    PANDA(Panda.class);

    final Class<? extends Animal> clazz;

    private AnimalEnum(Class<? extends Animal> clazz){
        this.clazz = clazz;
    }
}

工廠類

package com.example.java8.model.animal;
/**
 * 動(dòng)物工廠
 */
public class AnimalFactory {

    public static Animal producer(AnimalEnum animalEnum) {
        Class<? extends Animal> clazz = AnimalFactory.getClazz(animalEnum);
        if (Cat.class.equals(clazz)) {
            return new Cat();
        }
        if (Dog.class.equals(clazz)) {
            return new Dog();
        }
        if (Panda.class.equals(clazz)) {
            return new Panda();
        }
        return null;
    }

    private static Class<? extends Animal> getClazz(AnimalEnum animalEnum) {
        return animalEnum.clazz;
    }
}

測試

package com.example.java8.model.animal;
import org.junit.Test;
public class AnimalTest {
    @Test
    public void test() {
        Animal dog = AnimalFactory.producer(AnimalEnum.DOG);
        System.out.println(dog.myName());

        Animal cat = AnimalFactory.producer(AnimalEnum.CAT);
        System.out.println(cat.myName());
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容