简单工厂模式

工厂的作用:

可以自主生产自己的产品 而不在依赖于new()

定义一个moveable接口

Movable.java

package com.fgh.dp.factory;

/**
 * 定义moveable接口 任意具有可以移动特性的类都可以实现该接口
 *  比如汽车 飞机等
 * @author fgh
 *
 */
public interface Moveable {

	void run();
}

定义一个实现类Car.java

package com.fgh.dp.factory;

//import java.util.ArrayList;
//import java.util.List;

/**
 * 实现moveable接口
 */
public class Car implements Moveable {

	// 单例模式
	private static Car car = new Car();

	// 多例模式
	// private static List<Car> cars = new ArrayList<Car>();

	/**
	 * 如果不想让用户自己生产car 就设置成private
	 */
	public Car() {

	}

	/**
	 * 在这个方法里面可以添加逻辑 判断司机得到车需要的条件 比如身份证 驾照等
	 *  ---又称静态工厂模式
	 * 
	 * @return
	 */
	public static Car getInstance() {
		return car;
	}

	public void run() {
		System.out.println("开着车回老家,路途中。。。。");
	}
}
定义一个抽象工厂类 该类可以产生所有实现具有run特性的交通工具

VehicleFactory.java

package com.fgh.dp.factory;

/**
 * 定义一个抽象工厂类 为所有生产交通工具类的父类
 * 使程序可以在某个维度上进行扩展 不仅可以产生新的交通工具
 * 而且还可以控制产生新的交通工具的生产
 * 
 * @author fgh
 *
 */
public abstract class VehicleFactory {

	abstract Moveable create();
}

定义实现该抽象工厂的实现类 CarFactory.java

package com.fgh.dp.factory;

/**
 * 抽象工厂类的实现类 专门生产汽车的工厂
 * @author fgh
 *
 */
public class CarFactory extends VehicleFactory{

	/**
	 * 重写父类方法
	 */
	@Override
	public Moveable create() {
		return new Car();
	}
}
测试方法:Test.java

package com.fgh.dp.factory;

public class Test {
	public static void main(String[] args) {

		/**
		 * 这种方式 司机可以拥有多辆车 通过new 得到 
		 * 如果想要让司机不能自己随便得到的车的话 
		 * 可以通过在方法里 提供一个私有构造方法 实现 这样
		 * 就不能通过new得到 但是 不能new的话 用户得不到车
		 * 
		 */
		// Car c = new Car();
		// Car.getInstance().run();
		// c.run();
		/**
		 * 通过new方法 产生任意的交通工具
		 */
		// Moveable m = new Plane();
		// m.run();
		/**
		 * 通过工厂的方式 产生任意的交通工具
		 */
		VehicleFactory factory = new CarFactory();
		Moveable f = factory.create();
		f.run();
	}
}


运行结果:

开着车回老家,路途中。。。。

生产具体交通类和抽象工厂类关系图

简单工厂模式_第1张图片


该过程使用了抽象类和接口,关于抽象类的接口什么时候使用的说明:

抽象类和接口的使用:

1、这个概念确实在我们脑子中存在的 就用抽象类
2、如果这个概念仅仅是某个方面的一个特性 比如会飞的、会唱的等 像这样的就设计成接口
3、在不清楚是设计成抽象类还是设计成接口的时候,一般都设计成接口 原因是实现了这个接口之  
   后 还可以从其他的抽象类继承 更灵活











你可能感兴趣的:(简单工厂模式)