java工厂类怎么实现

Python016

java工厂类怎么实现,第1张

工厂方法模式分为三种:

1、普通工厂模式,就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建

2、多个工厂方法模式,是对普通工厂方法模式的改进,在普通工厂方法模式中,如果传递的字符串出错,则不能正确创建对象,而多个工厂方法模式是提供多个工厂方法,分别创建对象。

3、静态工厂方法模式,将上面的多个工厂方法模式里的方法置为静态的,不需要创建实例,直接调用即可。

具体代码请参考:java设计模式   第三大节

如果对您有帮助,请及时采纳谢谢

Java工厂模式可分为三种:

1.静态工厂模式

2.工厂方法模式

3.抽象工厂模式

一、静态工厂模式:用静态的方法实现,其创建的对象具有一定的特性

举例如下:

Vehicle类:

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")

}

}

静态工厂类:

(静态工厂创建一个对象,

静态工厂创建的对象一般都有一个共同的特性,

继承自某一个类,

或者引用一个接口)

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=0i<cs.lengthi++){

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

}

}

工厂类嘛,顾名思义,就是专门“生产”类的,而且是你需要什么样的类,它就“生产”什么样的类,这属于设计模式的范畴。可以理解成是面向对象编程里对多态的一种实现或者应用。可以参见blog.csdn.net/lee576/article/details/1549910