JAVA设计模式—工厂方法模式

                                                                     Factory Method模式

工厂方法模式介绍:

    工厂方法模式又称虚拟构造子模式,可以说是简单工厂的抽象,也可以理解为简单工厂是退化了的工厂方法模式,其表现在简单工厂丧失了工厂方法的多态性

 

工厂模式使用场景:

     1.在编码时不能预见需要创建哪种类的实例。

     2.系统不应依赖于产品类实例如何被创建、组合和表达的细节。

 

工厂方法和简单工厂区别:

     1.简单工厂通过方法传入的参数来判断并根据参数值实例化具体的操作类。

     2.工厂方法通过定义抽象工厂,实现具体工厂类,返回具体产品父类接口或抽象类的方式来调用生成需要的类。

 

工厂方法结构图:



 

引入问题:

    造车工厂会造拖拉机,汽车,火车,在一个工厂里明显不能完成,在现实世界中,一定是有自己独立的工厂来做。因为我们知道拖拉机,汽车,火车有很多共性也有很大差异,共性还是车,肯定都是重工生产,需要钢材,车床加工,都需要动力,都有座椅,车灯等等,那差异就多了,动力不同,火车可能是电动力,汽车是汽油,拖拉机是柴油等等。

 

代码设计:

/**
 * 抽象工厂造车
 */
public interface CarsFactory
{
	/**
	 * 造车
	 */
	public Cars create();
}

 

/**
 * 汽车工厂-具体工厂
 */
public class CarFactory implements CarsFactory
{
	@Override
	public Cars create()
	{
		return new Car();
	}
}

 

/**
 * 拖货机工厂-具体工厂
 */
public class TractorFactory implements CarsFactory
{
	@Override
	public Cars create()
	{
		return new Tractor();
	}
}

 

/**
 * 火车工厂-具体工厂
 */
public class TrainFactory implements CarsFactory
{
	@Override
	public Cars create()
	{
		return new Train();
	}
}

 

 

 
/**
 * 抽象产品车
 */
public interface Cars
{
	/**
	 * 运输
	 */
	public void transport();
}

 

/**
 * 汽车实现类-具体产品
 */
public class Car implements Cars
{
	@Override
	public void transport()
	{
		System.out.println("Do Cars Car");
	}
}

 

/**
 * 拖拉机实现类-具体产品
 */
public class Tractor implements Cars
{
	@Override
	public void transport()
	{
		System.out.println("Do Cars Tractor");
	}
}

 

/**
 * 火车实现类-具体产品
 */
public class Train implements Cars
{
	@Override
	public void transport()
	{
		System.out.println("Do Cars Train");
	}
}

 

public static void main(String[] args)
{
	Cars cars = null;
		
	/** 实例化汽车工厂,并开始造车*/
	cars = new CarFactory().create();
	cars.transport();
		
	/** 实例化火车工厂,并开始造车*/
	cars = new TrainFactory().create();
	cars.transport();
		
	/** 实例化拖拉机工厂,并开始造车*/
	cars = new TractorFactory().create();
	cars.transport();
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值