工厂方法模式
1、工厂方法模式(Factory Method)
工厂方法模式分三种:普通工厂模式、多个工厂方法模式、静态工厂方法模式
1.1普通工厂模式
建立一个工厂类,对实现了同一接口的一些类进行实例的创建。
例如:
对具有相同特征的方法抽象出一个接口。
public interface Eat {
public void eat();
}
实现该接口
public class DogEat implements Eat {
@Override
public void eat(){
System.out.print("dog eat meat.....");
}
}
public class CatEat implements Eat {
@Override
public void eat(){
System.out.print("cat eat fish.....");
}
}
创建工厂
public class EatFactory {
public static Eat getEat(String type){
if(StringUtils.isNotBlank(type)){
switch (type){
case "dog":
return new DogEat();
case "cat":
return new CatEat();
}
}
return null;
}
}
创建实例化对象
public class TestExample {
@Test
public void test(){
Eat catEat = EatFactory.getEat("cat");
Eat dogEat = EatFactory.getEat("dog");
}
}
1.2多个工厂方法模式
是对普通工厂方法模式的改进,在普通工厂方法模式中,如果传递的字符串出错,则不能正确创建对象,而多个工厂方法模式是提供多个工厂方法,分别创建对象。
其余的逻辑同上,创建工厂代码如下:
public class EatFactory {
public Eat dogEat(){
return new DogEat();
}
public Eat catEat(){
return new CatEat();
}
}
创建实例化对象如下:
public class TestExample {
@Test
public void test(){
EatFactory eatFactory = new EatFactory();
Eat catEat = eatFactory.catEat();
Eat dogEat = eatFactory.dogEat();
}
}
1.3静态工厂方法模式
将上面的多个工厂方法变为静态的。
public class EatFactory {
public static Eat dogEat(){
return new DogEat();
}
public static Eat catEat(){
return new CatEat();
}
}
实例化对象
public class TestExample {
@Test
public void test(){
Eat catEat = EatFactory.catEat();
Eat dogEat = EatFactory.dogEat();
}
}