概述:工厂模式顾名思义就是生产东西(对象)的一种设计模式,一般需要很多个且需使用复杂过程才能创建的对象(需要的对象数量很大,创建对象的过程复杂)。
代码:生产动物的工厂(例子不太恰当,哈哈)
动物接口和具体动物:
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 "我是国宝,小熊猫。";
}
}
动物枚举类(用于工厂生产时,做范围限制,保证是我有能力可以生产的)
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());
}
}
网友评论