设计模式-创建型-Factory Method(工厂方法)

https://demo.asia.trading212.com/

工厂模式是一种最常用的实例化对象模式,即用工厂方法来替代New操作的模式。


简单工厂实例

创建一个制造汽车配件的接口MakeParts

package designPattern.factoryPattern.simpleFactory;

public interface MakeParts {
	public void makeEngine();
	public void makeDriver();
	public void makeTire();
}

创建两个实现MakeParts接口的汽车配件制造品牌类

package designPattern.factoryPattern.simpleFactory;

public class MakeBSJ implements MakeParts {

	@Override
	public void makeEngine() {
		System.out.println("制造保时捷的发动机");
	}

	@Override
	public void makeDriver() {
		System.out.println("制造保时捷的驾驶系统");
	}

	@Override
	public void makeTire() {
		System.out.println("制造保时捷的轮胎");
	}

}
package designPattern.factoryPattern.simpleFactory;

public class MakeFLL implements MakeParts {

	@Override
	public void makeEngine() {
		System.out.println("制造法拉利的发动机");
	}

	@Override
	public void makeDriver() {
		System.out.println("制造法拉利的驾驶系统");
	}

	@Override
	public void makeTire() {
		System.out.println("制造法拉利的轮胎");
	}

}

创建汽车配件制造工厂

package designPattern.factoryPattern.simpleFactory;

public class MakeCarFactory {
	public static MakeParts makeCar(String carType){
		if("BSJ".endsWith(carType)){
			return new MakeBSJ();
		}else if("FLL".equals(carType)){
			 try {
				return MakeFLL.class.newInstance();
			} catch (Exception e) {
				e.printStackTrace();
				return null;
			} 
		}else{
			System.out.println("目前不能制造这种车辆");
			return null;
		}
	}
}

测试汽车配件制造工厂

package designPattern.factoryPattern.simpleFactory;

public class GetCar {

	public static void main(String[] args) {
		MakeParts bsj = MakeCarFactory.makeCar("BSJ");
		bsj.makeDriver();
		bsj.makeEngine();
		bsj.makeTire();
		MakeParts fll = MakeCarFactory.makeCar("FLL");
		fll.makeEngine();
		fll.makeTire();
		MakeParts bl = MakeCarFactory.makeCar("BL");
		bl.makeDriver();
	}
}

输出结果:

制造保时捷的驾驶系统

制造保时捷的发动机

制造保时捷的轮胎

制造法拉利的发动机

制造法拉利的轮胎

目前不能制造这种车辆

简单工厂模式的优缺点分析: 

       优点:工厂类是整个模式的关键所在。它包含必要的判断逻辑,能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。用户在使用时可以直接根据工厂类去创建所需的实例,而无需了解这些对象是如何创建以及如何组织的。有利于整个软件体系结构的优化。

      缺点:由于工厂类集中了所有实例的创建逻辑,这就直接导致一旦这个工厂出了问题,所有的客户端都会受到牵连;而且由于简单工厂模式的产品室基于一个共同的抽象类或者接口,这样一来,但产品的种类增加的时候,即有不同的产品接口或者抽象类的时候,工厂类就需要判断何时创建何种种类的产品,这就和创建何种种类产品的产品相互混淆在了一起,违背了单一职责,导致系统丧失灵活性和可维护性。而且更重要的是,简单工厂模式违背了“开放封闭原则”,就是违背了“系统对扩展开放,对修改关闭”的原则,因为当我新增加一个产品的时候必须修改工厂类,相应的工厂类就需要重新编译一遍。

      总结一下:简单工厂模式分离产品的创建者和消费者,有利于软件系统结构的优化;但是由于一切逻辑都集中在一个工厂类中,导致了没有很高的内聚性,同时也违背了“开放封闭原则”。另外,简单工厂模式的方法一般都是静态的,而静态工厂方法是无法让子类继承的,因此,简单工厂模式无法形成基于基类的继承树结构。

简单工厂模式的实际应用简介: 

       作为一个最基本和最简单的设计模式,简单工厂模式却有很非常广泛的应用,我们这里以Java中的JDBC操作数据库为例来说明。

        JDBC是SUN公司提供的一套数据库编程接口API,它利用Java语言提供简单、一致的方式来访问各种关系型数据库。Java程序通过JDBC可以执行SQL语句,对获取的数据进行处理,并将变化了的数据存回数据库,因此,JDBC是Java应用程序与各种关系数据进行对话的一种机制。用JDBC进行数据库访问时,要使用数据库厂商提供的驱动程序接口与数据库管理系统进行数据交互。


猜你喜欢

转载自my.oschina.net/u/2335525/blog/488296
今日推荐