标签:
定义:
Defined an interface for creating an object,but let subclasses decide which class to instantiate.
Factory Method let a class defer instantiation to subclass
(定义一个创建对象的接口,让子类类型来决定实例化对象。工厂方法能够使类的实例化延迟到具体的子类)
工厂方法的泛型应用是关键
类图:
一 定义产品
1 定义产品接口
package dmode.factory;
/**
* 类描述: 战争接口
* @version 1.0 CreateDate: 2015-2-12
*
*/
public interface IWar {
/**
* 方法描述:发动战争
*
*/
public void warring();
/**
* 方法描述:进攻
*
*/
public void attack();
}
2 定义 产品实现
package dmode.factory;
/**
* 类描述: 北美战场
* @version 1.0 CreateDate: 2015-2-12
*/
public class AmerWar implements IWar {
/**
*@see dmode.factory.IWar#warring()
*/
@Override
public void warring() {
System.out.println("发动北美战争.....");
}
/**
*@see dmode.factory.IWar#attack()
*/
@Override
public void attack() {
System.out.println("北美战争开始");
}
}
package dmode.factory;
/**
* 类描述: 亚洲战场
* @version 1.0 CreateDate: 2015-2-12
*/
public class AsiaWar implements IWar{
/**
*@see dmode.factory.IWar#warring()
*/
@Override
public void warring() {
System.out.println("发动东亚战争.........");
}
/**
*@see dmode.factory.IWar#attack()
*/
@Override
public void attack() {
System.out.println("东亚战争开始...");
}
}
二:定义工厂
1 定义工厂接口
package dmode.factory;
/**
* 类描述: 战场接口
*/
public interface IWarFactory {
/**
* 方法描述:制造战争
* <T extends IWar> 泛型方法, 限制了传入参数必须是战争的子类
* Class<T> 可以做一个接收形参
*/
public <T extends IWar> T makeWar(Class<T> t);
}
2 定义工厂实现类
package dmode.factory;
/**
* 类描述: 战场
*/
public class WarFactory implements IWarFactory{
/**
*@see dmode.factory.IWarFactory#makeWar(java.lang.Class)
*/
@Override
public <T extends IWar> T makeWar(Class<T> t) {
T instenc = null;
try {
instenc = t.newInstance();
} catch (Exception e) {
System.out.println("实例化战争异常...");
}
return instenc;
}
}
三:调用场景
package dmode.factory;
/**
* 类描述: 入口
*/
public class Acce {
public static void main(String[] args) {
IWarFactory warFactory = new WarFactory();
IWar warAsia = warFactory.makeWar(AsiaWar.class);
warAsia.warring();
warAsia.attack();
IWar warAmer = warFactory.makeWar(AmerWar.class);
warAmer.warring();
warAmer.attack();
}
}
运行结果
发动东亚战争.........
东亚战争开始...
发动北美战争.....
北美战争开始
标签:
原文地址:http://www.cnblogs.com/leonkobe/p/4287880.html