工厂方法模式

工厂方法模式有四种角色:

1:抽象工厂角色:担任这个角色的是工厂方法模式的核心,它是与应用程序无关的,任何在模式中创建的工厂类必须实现这个接口,这个角色一般有Java接口扮演,在实际的系统中,这个角色也常常使用抽象java类来实现。

2:具体工厂角色:担任着个角色的是实现了抽象工厂接口的具体Java类。具体工厂角色含有与应用密切相关的逻辑,并且受到应用程序的调用以创建产品对象。

3:抽象产品角色:工厂方法模式所创建的对象的超类型,也就是产品对象的共同富类型或共同拥有的接口。通常由java接口来实现,实际系统中有的时候用java抽象类来实现。

4:具体产品角色:这个角色实现了实现了抽象产品角色所声明的接口,工厂方法模式所创建的每一个对象都是某个具体产品角色的实例。

下面按照上面提到的角色来依次介绍:

抽象工厂角色:

/**
 * 
 */
package com.cn.gd.factory;

/**
 * @author sandy
 *
 */
//交通工具类充当抽象工厂角色
public abstract class VehicleFactory {
	public abstract Moveable   create();
}

 

具体工厂角色:

/**
 * 
 */
package com.cn.gd.factory;

/**
 * @author sandy
 * 生产火车的工厂实现了交通工具的抽象工厂
 * 在这里担当具体工厂角色
 */
public class TrainFactory extends VehicleFactory {

	/* (non-Javadoc)
	 * @see com.cn.gd.factory.VehicleFactory#create()
	 */
	@Override
	public Moveable create() {
		return  new Train();
	}
}

 

/**
 * 
 */
package com.cn.gd.factory;

/**
 * @author sandy
 * 生产汽车的工厂实现了交通工具的抽象工厂
 * 在这里担当具体工厂角色
 */
public class CarFactory extends VehicleFactory {

	/* (non-Javadoc)
	 * @see com.cn.gd.factory.VehicleFactory#create()
	 */
	@Override
	public Moveable create() {
		return new Car();
	}
}

  

/**
 * 
 */
package com.cn.gd.factory;

/**
 * @author sandy
 * 生产飞机的工厂实现了交通工具的抽象工厂
 * 在这里担当具体工厂角色
 */
public class PlaneFactory extends VehicleFactory {

	/* (non-Javadoc)
	 * @see com.cn.gd.factory.VehicleFactory#create()
	 */
	@Override
	public Moveable create() {
		return new Plane();
	}
}

 抽象产品角色:

/**
 * 
 */
package com.cn.gd.factory;

/**
 * @author sandy
 * 抽象产品角色
 */
public interface Moveable {
	//可以移动
	void move();
}

 具体产品角色: 

package com.cn.gd.factory;
/**
 * 
 * @author sandy
 *具体产品角色火车类
 */
public class Train implements Moveable {

	public void move() {
		System.out.println("the train is moving .................................");
	}
}

 

/**
 * 
 */
package com.cn.gd.factory;

/**
 * @author sandy
 * 具体产品角色汽车类
 */
public class Car implements Moveable {
	public void move() {
		System.out.println("the  car is moving .........................");
	}
}

 

package com.cn.gd.factory;
/**
 * 
 * @author sandy
 * 具体产品角色飞机类
 */
public class Plane implements Moveable {

	public void move() {
		System.out.println("the plane is moving .......................");
	}
}

 

客户端程序代码:

/**
 * 
 */
package com.cn.gd.factory;

/**
 * @author sandy
 *客户端程序来测试工厂方法模式
 */
public class Client {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		start();
	}

	private static void start() {
	//	VehicleFactory  factory=new CarFactory();
//		VehicleFactory  factory=new PlaneFactory();
		VehicleFactory  factory=new TrainFactory();
		Moveable  movetool=factory.create();
	    movetool.move();
	}

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值