注册工厂
来源:互联网 发布:知微的博客 编辑:程序博客网 时间:2024/05/17 09:33
当我们要随机创建多个不同父类的子类时,我们可以用工厂方法设计模式结合泛型实现。
代码例子:
public interface Factory<T> { T create(); } class Part { public String toString() { return getClass().getSimpleName(); } //储存对象工厂 static List<Factory<? extends Part>> partFactories = new ArrayList<Factory<? extends Part>>(); static { partFactories.add(new FuelFilter.Factory()); partFactories.add(new AirFilter.Factory()); partFactories.add(new CabinAirFilter.Factory()); partFactories.add(new OilFilter.Factory()); partFactories.add(new FanBelt.Factory()); partFactories.add(new PowerSteeringBelt.Factory()); partFactories.add(new GeneratorBelt.Factory()); } private static Random rand = new Random(47); //随机产生工厂 public static Part createRandom() { int n = rand.nextInt(partFactories.size()); return partFactories.get(n).create(); } } class Filter extends Part {} class FuelFilter extends Filter { public static class Factory implements beyondboy.Factory<FuelFilter> { public FuelFilter create() { return new FuelFilter(); } } } class AirFilter extends Filter { public static class Factory implements beyondboy.Factory<AirFilter> { public AirFilter create() { return new AirFilter(); } } } class CabinAirFilter extends Filter { public static class Factory implements beyondboy.Factory<CabinAirFilter> { public CabinAirFilter create() { return new CabinAirFilter(); } } } class OilFilter extends Filter { public static class Factory implements beyondboy.Factory<OilFilter> { public OilFilter create() { return new OilFilter(); } } } class Belt extends Part {} class FanBelt extends Belt { public static class Factory implements beyondboy.Factory<FanBelt> { public FanBelt create() { return new FanBelt(); } } } class GeneratorBelt extends Belt { public static class Factory implements beyondboy.Factory<GeneratorBelt> { public GeneratorBelt create() { return new GeneratorBelt(); } } } class PowerSteeringBelt extends Belt { public static class Factory implements beyondboy.Factory<PowerSteeringBelt> { public PowerSteeringBelt create() { return new PowerSteeringBelt(); } } } public class RegisteredFactories { public static void main(String[] args) { for(int i = 0; i < 10; i++) System.out.println(Part.createRandom()); } }
运行结果:
GeneratorBelt
CabinAirFilter
GeneratorBelt
AirFilter
PowerSteeringBelt
CabinAirFilter
FuelFilter
PowerSteeringBelt
PowerSteeringBelt
FuelFilter
0 0
- 注册工厂
- 自动注册工厂实例
- 注册工厂模式
- Thingking in Java 注册工厂
- Java注册工厂模式案例
- spring bean装配 注册动态工厂和静态工厂
- C++ 中泛型工厂注册类的实现
- 自动注册的工厂类(转贴CSDN)
- java实现的注册工厂模式
- 项目中组件工厂的注册方法
- 自动注册工厂消灭switch-case
- C++中实现自动注册的工厂
- 演练:创建和注册 HTTP 处理程序工厂
- PHP设计模式 二 (单例 工厂 注册)
- 实体创建:业务侧注册创建接口到平台工厂
- 利用C++11实现一个自动注册的工厂
- 利用C++11实现一个自动注册的工厂
- 利用C++11实现一个自动注册的工厂
- Android 摄像头
- FZU Problem 2171 防守阵地 II (裸线段树 懒惰标记)
- JS与PHP的区别
- java内存分配策略
- 第三章第46题
- 注册工厂
- Android/iOS_Fiddler 实现手机的抓包(1)
- Ubantu 14.04 安装 jdk 1.7
- Activity中的四种启动模式
- DuiVision开发教程(2)-如何写一个简单的界面程序
- Android/iOS_Fiddler 实现手机的抓包(2)
- 北京住宿费发票 QQ;147107880 电话;13751037070
- Ajax IE charset问题
- c#在新线程创建窗体卡住问题