定义:
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(); } }
运行结果
发动东亚战争......... 东亚战争开始... 发动北美战争..... 北美战争开始
时间: 2024-07-31 00:40:28