Java的几个工厂方法解析

Java工厂模式可分为三种:静态工厂模式、工厂方法模式、抽象工厂模式。

一、静态工厂模式:用静态的方法实现,其创建的对象具有一定的特性
举例如下:
Vehicle类:
/**
*@author written by zrq
**/
public abstract class Vehicle
{
    private String name;

    public Vehicle (){
        super();
    }
    public Vehicle (String name){
        super();
        this.name=name;
    }
    public abstract void run();
    public String getName(){
        return name;
    }
    public void setName(String name){
        this.name=name;
    }
}

Bus类:
public class Bus extends Vehicle  
{
    private String name;

    public Bus(){}
    public Bus(String name){
        super(name);
    }
    @Override
    public abstract void run(){
        System.out.println("Bus is running");
    }
}

Car类:
public class Car extends Vehicle  
{
    private String name;

    public Car(){}
    public Car(String name){
        super(name);
    }
    @Override
    public abstract void run(){
        System.out.println("Car is running");
    }
}

静态工厂类:(静态工厂创建一个对象,静态工厂创建的对象一般都有一个共同的特性,继承自某一个类,或者引用一个接口,如本例中的Bus与Car均继承自Vehicle类,同时这些类都是Object或Object的一个子类)

public class StaticFactory{
    public static Object getInstance(String className){
        Object instance=null;
        try{
            Class c=Class.forName(className);
            instance=c.newInstance();
        }catch(Exception e){}
        return instance;
    }
    
    public static Object getInstance(String className,Object ...args){
        Class c=null;
        try{
            c=Class.forName(className);
        }catch(Exception e){}
        Constructor[] cons=c.getConstructors();
        Object instance=null;
        for(Constructor con:cons){
            Class<?>[] cs=con.getParmeterTypes();
            if(cs.length>0){
                boolean isConstructor=true;
                for(int i=0;i<cs.length;i++){
                    Class t=cs[i];
                    if(!t.isInstance(args[i])){
                        isConstructor=false;
                    }
                }
                if(isConstructor){
                    try{
                        instance=con.newInstance(args);
                        break;
                    }catch(Exception e){}
                }else{
                    continue;
                }
            }
        }
        return instance;
    }
}



二、工厂方法模式:主要是对各类东西分类生产,但分类生产的对象仍然具有某一特性。如果说静态工厂是一个综合的交通工具建造工厂,那么工厂方法模式就是具体分工,分成Bus与Car的工厂,各自生产各自的产品,但是造出来的还是交通工具。

交通工具制造接口:
public interface VehicleMake{
    /**制造交通工具**/
    public Vehicle make();
}

Bus制造类:
public class BusMake implements VehicleMake{
    @Override
    public Vehicle make(){
        Vehicle bus=new Bus();
        System.out.println("Bus工厂制造了一辆Bus");
        return bus;
    }
}

Car制造类:
public class CarMake implements VehicleMake{
    @Override
    public Vehicle make(){
        Vehicle car=new Car();
        System.out.println("Car工厂制造了一辆Car");
        return car;
    }
}


三、抽象工厂模式:抽象工厂生产的对象可能是没有共同特性的。比如,一个制造工厂BusMake不仅能制造Bus还能生产轮胎wheel等配件,Bus是交通工具,wheel是配件(代码中有部分类没具体写出来只给了类名)

总工厂(抽象工厂总接口):
public interface WheelVehicleMake extends VehicleMake{
    /**制造轮胎**/
    public Wheel makeWheel();
}

轮子BusMake:
public class WheelBusMake implements WheelVehicleMake{
    @Override
    public Vehicle make(){
        Vehicle bus=new Bus();
        System.out.println("WheelBusMake生产了一辆Bus");
        return bus;
    }
    @Override
    public Wheel makeWheel(){
        Wheel busWheel=new BusWheel();
        System.out.println("WheelBusMake生产了一个Bus轮子");
        return busWheel;
    }
}

轮子CarMake:
public class WheelCarMake implements WheelVehicleMake{
    @Override
    public Vehicle make(){
        Vehicle car=new Car();
        System.out.println("WheelCarMake生产了一辆Car");
        return car;
    }
    @Override
    public Wheel makeWheel(){
        Wheel carWheel=new CarWheel();
        System.out.println("WheelCarMake生产了一个Car轮子");
        return carWheel;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值