Java常用的设计模式之简单工厂模式

工厂模式(Factory)

1、概念理解
工厂模式是一种经常被使用到的模式,根据工厂模式实现的类可以通过提供的数据生成一组类中某一个类的实例,通常这一组类有一个公共的抽象父类并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作。首先需要定义一个抽象的父类,该类的子类通过不同的方法实现了父类中相同的方法。然后需要定义一个工厂类,工厂类可以根据条件生成不同的子类实例。当得到子类的实例后,开发人员可以调用父类中的方法而不必考虑到底返回的是哪一个子类的实例。

2、主要作用
1. 应用程序的设计中把对象集中在一个地方,或者统一由某类来管理,(Spring框架);
2. 在不改动应用程序的基础上,可以直接添加对象,同时也利于对象的维护。

3、应用场合
1. 如果一个对象拥有很多子类,那么在创建该对象的子类实例时使用工厂模式是最合适的,不但可以面向接口的编程,为开发以及维护带来方便;
2. 如果创建某个对象时需要进行许多额外的操作,如查询数据库然后将查询到的值赋予要创建的对象(单例初始化时使用比较多),或是需要许多额外的赋值等等。如果查看JDK源码中,会发现许多成员变量在对象构造时,通过工厂方法进行创建的。因为这些成员变量本身的创建也很复杂。不可能创建对象时,在该对象的构造方法里创建成员变量然后再赋值给该成员变量。而且使用工厂模式也提高了代码的重用性。

简单工厂模式(Simple Factory)

1、基本构成
有三个角色:一个抽象产品类,多个具体产品实现类,一个工厂类。

2、特点
由一个工厂类去实例化具体的产品。

实例:有一个汽车接口,有多个汽车实现类,还有一个汽车管理者(汽车驾驶员),有一个老板:

代码如下:

第一步:创建产品抽象类

package simpleFactory;

/**
 * 创建产品抽象类:轿车
 */

public interface Car {

    public void drive();

}

第二步:创建产品具体实现类

package simpleFactory;

/**
 * 创建产品具体实现类:奥迪
 */

public class Audi implements Car {

    public void drive() {
        System.out.println("开奥迪去旅游!");
    }

}
package simpleFactory;

/**
 * 创建产品具体实现类:奔驰
 */

public class Benz implements Car {

    public void drive() {
        System.out.println("开奔驰去上班!");
    }

}
package simpleFactory;

/**
 * 创建产品具体实现类:宝马
 */

public class Bmw implements Car {

    public void drive() {
        System.out.println("开宝马接小孩上学!");
    }

}

第三步:创建工厂类

package simpleFactory;

/**
 * 创建工厂类:司机
 */

public class Driver {

    public Car driverCar(String carName){
        if(carName.equals("Audi")){
            return new Audi();
        }else if(carName.equals("Benz")){
            return new Benz();
        }else{
            return new Bmw();
        }
    }

}

第四步:创建测试类

package simpleFactory;

/**
 * 创建测试类:老板
 */

public class Boss {
    public static void main(String[] args) {

        Driver driver = new Driver();

        Car audi = driver.driverCar("Audi");
        audi.drive();

        Car benz = driver.driverCar("Benz");
        benz.drive();

        Car bmw = driver.driverCar("Bmw");
        bmw.drive();

    }
}

结果显示:

这里写图片描述

猜你喜欢

转载自blog.csdn.net/jsc123581/article/details/81749094