注册工厂模式

工厂方法设计模式

将对象的创建工作交给类自己去完成。工厂方法可以被多态地调用,从而为你创建恰当类型的对象。

创建工厂方法接口,用于生成对象

   
   
package factory;
// factory interface
public interface Factory<T> {
T create();
}

创建生成工厂类

    
    
class Part {
public String toString() {
return getClass().getSimpleName();
}
 
static List<Factory<? extends Part>> partFactories = new ArrayList<>();
static {
partFactories.add(new FuelFilter.FactorySub());
partFactories.add(new AirFilter.FactorySub());
partFactories.add(new CabinFilter.FactorySub());
partFactories.add(new OilFilter.FactorySub());
partFactories.add(new FanBelt.FactorySub());
partFactories.add(new GeneratorBelt.FactorySub());
partFactories.add(new PowerSteeringBelt.FactorySub());
}
 
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 FactorySub implements Factory<FuelFilter> {
@Override
public FuelFilter create() {
return new FuelFilter();
}
}
}
 
class AirFilter extends Filter {
public static class FactorySub implements Factory<AirFilter> {
@Override
public AirFilter create() {
return new AirFilter();
}
 
}
}
 
class CabinFilter extends Filter {
public static class FactorySub implements Factory<CabinFilter> {
@Override
public CabinFilter create() {
return new CabinFilter();
}
 
}
}
 
class OilFilter extends Filter {
public static class FactorySub implements Factory<OilFilter> {
@Override
public OilFilter create() {
return new OilFilter();
}
}
}
 
class Belt extends Part {
}
 
class FanBelt extends Belt {
public static class FactorySub implements Factory<FanBelt> {
@Override
public FanBelt create() {
return new FanBelt();
}
}
}
 
class GeneratorBelt extends Belt {
public static class FactorySub implements Factory<GeneratorBelt> {
@Override
public GeneratorBelt create() {
return new GeneratorBelt();
}
}
}
 
class PowerSteeringBelt extends Belt {
public static class FactorySub implements Factory<PowerSteeringBelt> {
@Override
public PowerSteeringBelt create() {
return new PowerSteeringBelt();
}
}
}

利用工厂模式生成一个对象

    
    
public class RegisteredFactories {
public static void main(String[] args) {
System.out.println(Part.createRandom());
}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值