常用设计模式【工厂方法模式】

77 阅读2分钟

一、工厂方法模式的定义

定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。

二、工厂方法模式的实现

首先,定义一个工厂接口(也可以是抽象类或者具体类)。

//抽象工厂类
public interface  Factory{
	public void method1();
}

在抽象工厂中声明了工厂方法但并未实现工厂方法,具体产品对象的创建由其子类负责。

//具体工厂类1
public class ConcreteFactory1 implements Factory{
	@Override
	public void method1(){
	//具体逻辑处理
	}
}
//具体工厂类2
public class ConcreteFactory2 implements Factory{
	@Override
	public void method1(){
	//具体逻辑处理
	}
}

具体工厂类实现了工厂方法,可以有多个,都继承于工厂类,不同的具体工厂可以创建不同的具体产品。

使用场景:

public static void main(String[] args) {
       ConcreteFactory1 c1 = new ConcreteFactory1 ();
       c1.method1();
       ConcreteFactory2 c2 = new ConcreteFactory2 ();
       c2.method1();
    }

三、工厂方法模式的优缺点及应用场景

优点:首先,良好的封装性,代码结构清晰;如一个调用者需要一个具体的产品对象,只要知道这个产品的类名就可以了。其次,工厂方法模式的扩展性非常优秀,在系统中加入新产品时无须修改抽象工厂和抽象产品提供的接口,也无须修改其他的具体工厂和具体产品,只需要添加一个具体工厂和具体产品即可。

缺点:在添加新产品时需要编写新的具体产品类,而且还要提供与之对应的具体工厂类,系统中类的个数将成对增加,在一定程度上增加了系统的复杂度,有更多的类需要编译和运行,会给系统带来一些额外的开销。

使用场景:工厂方法模式是new一个对象的替代品,所以在所有需要生成对象的地方都可以使用,但是需要慎重地考虑是否要增加一个工厂类进行管理,以免增加代码的复杂度。其次,需要灵活的、可扩展的框架时,可以考虑采用工厂方法模式。