Registered factories

该博客介绍了注册工厂模式的应用,通过将各个子类的工厂放入一个List中,然后根据需要动态地从List中选择工厂创建对应的对象。具体实现包括一个父类`Part`,多个子类如`Filter`和`FuelFilter`,以及实现了`Factory`接口的工厂类。通过`Part.createRandom()`方法,可以随机创建父类或其子类的对象。
摘要由CSDN通过智能技术生成

工厂模式:就是建立对象都放在工厂来完成。

注册工厂:就是把这些工厂全部放在一个List里面去,然后循环调用工厂动态的建立对象


一个父类有许多子类

1、现在想自动建立子类的对象,哪怎么办?

2、 使用工厂模式,每个子类里有个建立自己对象的工厂,(也可以使用其它方式实现)

3、然后父类直接把每个子类的工厂:放入自己  List 里面。

package ftypeinfo.factory;
public interface Factory<T> { //T就是子类
 T create();
}

package ftypeinfo;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import ftypeinfo.factory.Factory;

class Part{
  public String toString(){
return getClass().getSimpleName(); //对象里的方法子类都可以用。
  }
  /**<? extends Part>:? 表示Part的子类。
   * <Factory<Part的子类>> 
   * 表示List里面放的是Factory的实现类。
   *  FuelFilter:Part的子类
   * Factory,FuelFilter里面的内部类。
   */  
    static List<Factory<? extends Part>> partFactories=
    new ArrayList<Factory<? extends Part>>();
    static { //建立子类的Factor 对象
    partFactories.add(new FuelFilter.Factor());     //可以添加多个子类工厂对象。
    }
    
    private static Random rand=new Random(47);

    // 建立子类对象
    public static Part createRandom()
    {
      int n=rand.nextInt(partFactories.size());
      return partFactories.get(n).create();  //从List选取建立实例  
    }
}
class Filter extends Part{}
class FuelFilter extends Filter{
public static class Factor implements ftypeinfo.factory.Factory<FuelFilter>
{
@Override
public FuelFilter create() {
// TODO Auto-generated method stub
return new FuelFilter();
}}
}

public class RegisteredFactories {
public static void main(String[] args) {
// TODO Auto-generated method stub
     /** 
      * Part.createRandom()这个方法调用表示Part执行,

      *首先初始化Part 类的 static 块。

      * 初始化静态类。
      */
for(int i=0;i<10;i++)
              System.out.println(Part.createRandom());
     
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值