概述:工廠模式顧名思義就是生產(chǎn)東西(對象)的一種設(shè)計模式,一般需要很多個且需使用復(fù)雜過程才能創(chuàng)建的對象(需要的對象數(shù)量很大影所,創(chuàng)建對象的過程復(fù)雜)蹦肴。
代碼:生產(chǎn)動物的工廠(例子不太恰當(dāng),哈哈)
動物接口和具體動物:
package com.example.java8.model.animal;
/**動物接口*/
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 "我是國寶矛双,小熊貓。";
}
}
動物枚舉類(用于工廠生產(chǎn)時昌妹,做范圍限制动看,保證是我有能力可以生產(chǎn)的)
package com.example.java8.model.animal;
/**動物的枚舉類*/
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;
/**
* 動物工廠
*/
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());
}
}