java工厂模式

工厂模式有
1、工厂方法
2、抽象工厂方法。

下面我的实现是抽象工厂方法,

给所有具体的产品类定一个通用的接口。
package 工厂模式;

/**
 * 航天飞行接口
 * 
 * @Description
 * @author FuJianyong
 * 2015-7-14下午02:42:05
 */
public interface SpaceFlight {
    /**
     * 任务 
     */
    void task();
    
}




具体的产品类

package 工厂模式;

/**
 * 长征运载火箭
 * 
 * @Description
 * @author FuJianyong
 * 2015-7-14下午03:08:10
 */
public class LongMarch implements SpaceFlight {

	public LongMarch(){
		System.out.println("产品:\t长征运载火箭");
	}
	
	@Override
	public void task() {		
		System.out.println("任务:\t把航天器送上太空");
	}

}



package 工厂模式;

/**
 * 神舟飞船
 * 
 * @Description
 * @author FuJianyong
 * 2015-7-14下午03:18:00
 */
public class ShenzhouSpaceship implements SpaceFlight {

	public ShenzhouSpaceship(){
		System.out.println("产品:\t神舟飞船");
	}
	
	@Override
	public void task() {
		System.out.println("任务:\t承载宇航员在太空中溜达");
	}

}



package 工厂模式;

/**
 * 嫦娥探测器
 * 
 * @Description
 * @author FuJianyong
 * 2015-7-14下午03:21:59
 */
public class ChangeProber implements SpaceFlight {

	public ChangeProber(){
		System.out.println("产品:\t嫦娥探测器");
	}
	
	@Override
	public void task() {
		System.out.println("任务:\t探测月球信息");
	}
}



给所有工厂定一个抽象工厂基类。

package 工厂模式;

/**
 * 抽象工厂
 * 
 * @Description
 * @author FuJianyong
 * 2015-7-14下午02:42:17
 */
public abstract class Factory {

	/**
	 * 生产产品
	 */
	abstract SpaceFlight produce();
	
}



具体的工厂类

package 工厂模式;

/**
 * 长征运载火箭工厂
 * 
 * @Description
 * @author FuJianyong
 * 2015-7-14下午04:14:45
 */
public class LongMarchFactory extends Factory {

	public LongMarchFactory(){
		System.out.println("工厂:\t长征运载火箭工厂");
	}
	
	@Override
	SpaceFlight produce() {
		return new LongMarch();
	}

}



package 工厂模式;

/**
 * 神舟飞船工厂
 * 
 * @Description
 * @author FuJianyong
 * 2015-7-14下午03:58:07
 */
public class SpaceshipFactory extends Factory{

	public SpaceshipFactory(){
		System.out.println("工厂:\t神舟飞船工厂");
	}
	
	@Override
	SpaceFlight produce() {		
		return new ShenzhouSpaceship();
	}
	
}



package 工厂模式;

/**
 * 嫦娥飞行探测器工厂
 * 
 * @Description
 * @author FuJianyong
 * 2015-7-14下午04:00:57
 */
public class ProberFactory extends Factory {
	
	public ProberFactory(){
		System.out.println("工厂:\t嫦娥飞行探测器工厂");
	}

	@Override
	SpaceFlight produce() {
		return new ChangeProber();
	}
}



测试类

package 工厂模式;

/**
 * 测试抽象工厂
 * 
 * @Description
 * @author FuJianyong
 * 2015-7-14下午03:25:15
 */
public class FactoryMain{

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		//具体工厂
//		Factory factory = new LongMarchFactory();
		Factory factory = new ProberFactory();
//		Factory factory = new SpaceshipFactory();
		//生产产品
        SpaceFlight sapceFlight = factory.produce();
        //产品属性
        sapceFlight.task();
	}


}



三个工厂测试的结果依次为

工厂:	长征运载火箭工厂
产品:	长征运载火箭
任务:	把航天器送上太空

工厂:	嫦娥飞行探测器工厂
产品:	嫦娥探测器
任务:	探测月球信息

工厂:	神舟飞船工厂
产品:	神舟飞船
任务:	承载宇航员在太空中溜达

你可能感兴趣的:(java,抽象工厂)