java设计模式
工厂方法模式
在简单工厂模式中,如果增加一个新的类,需要先扩展Base类,然后在工厂方法中增加判断。这样每增加一个类就需要增加一个判断,当增加的类多了,判断语句也越来越长,而且每次都需要修改代码,不符合“开闭原则”。这时为了减少判断语句并且尽量符合开闭原则,工厂方法就应运而生了。
在工厂方法中,为了实现更好的扩展性,将工厂类抽象出来,让每个类都有自己的工厂方法。所以在扩展Base类时,不需要再去修改工厂方法,只需扩展抽象工厂,生成此新类的工厂。简单UML类图如下:
简单代码如下
// 基类
public interface Base{
public void method();
}
// 实现类Sub1
public class Sub1 implements Base {
public void method() {
System.out.println("this is Sub1...");
}
}
// 实现类Sub2
public class Sub2 implements Base {
public void method() {
System.out.println("this is Sub2...");
}
}
// 抽象工厂
public abstract class AbsFactory{
public abstract Base createBase();
}
// Sub1具体工厂
public class Sub1Factory extends AbsFactory{
public Base createBase(){
return new Sub1();
}
}
// Sub2具体工厂
public class Sub2Factory extends AbsFactory{
public Base createBase(){
return new Sub2();
}
}
// 测试类
import org.junit.Test;
public class FactoryTest {
@Test
public void demo(){
AbsFactory af = new Sub2Factory();
Base sub1 = af.createBase();
sub1.method();
}
}