例子说明java中的简单工厂模式

来源:互联网 发布:linux安装lnmp 编辑:程序博客网 时间:2024/05/16 06:15

工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式,工厂模式在Java程序系统可以说是随处可见。因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑使用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。
下面举个例子简单说明一下工厂模式:
1.首先创建一个生产车子的工厂:Factory.java;其中的product()就是创建所需要的工厂生产车子的方法

public class Factory {public static Car product(String type){    if(type.equalsIgnoreCase("SUV")){        return new SUV(type,120);    }else if(type.equalsIgnoreCase("FamilyCar")){        return new SportCar("家用小车",70);    }else if(type.equals("SportCar")){        return new FamilyCar("越野车",100);    }else{        System.out.println("你的车我们生产不了");        return null;    }}}

2.创建一个车子的类型类:Car.jar(各类型车的父类抽象类)

public abstract class Car {private String name;private int speed;public Car(String name, int speed) {    super();    this.name = name;    this.speed = speed;}public abstract void run() ;public String getName() {    return name;}public void setName(String name) {    this.name = name;}public int getSpeed() {    return speed;}public void setSpeed(int speed) {    this.speed = speed;}}

3.Car的子类:都继承Car类,并实现父类的run()方法

家庭车:public class FamilyCar extends Car{    public FamilyCar(String name, int speed) {        super(name, speed);        // TODO Auto-generated constructor stub    }    @Override    public void run() {        // TODO Auto-generated method stub        System.out.println("生产了一辆FamilyCar");    }}越野车:public class SportCar extends Car{    public SportCar(String name, int speed) {        super(name, speed);        // TODO Auto-generated constructor stub    }    @Override    public void run() {        // TODO Auto-generated method stub        System.out.println("生产了一辆越野车");    }}SUV:public class SUV extends Car{    public SUV(String name, int speed) {        super(name, speed);        // TODO Auto-generated constructor stub    }    @Override    public void run() {        // TODO Auto-generated method stub        System.out.println("生产了一辆SUV");    }}

4.测试类:Test.java

public class Test {public static void main(String[] args) {    Car car = Factory.product("SUV");    car.run();}}

5.我们需要将创建实例的工作与使用实例的工作分开, 也就是说,让创建实例所需要的大量初始化工作从Car的构造函数中分离出去。这时我们就需要Factory工厂模式来生成对象了,不能再用简单new car(参数)。
工厂模式中有: 工厂方法(Factory Method) 抽象工厂(Abstract Factory).
这两个模式区别在于需要创建对象的复杂程度上。

0 0