一、简单工厂:使用工厂类代替new 来创建对象
1.定义抽象类
package cn.edu.tju.app;
//定义交通工具抽象类
public abstract class Vehicle {
//定义"启动"抽象方法
public abstract void start();
}
2.定义上述抽象类的2个实现类
package cn.edu.tju.app;
public class Car extends Vehicle {
@Override
public void start() {
System.out.println("开动汽车");
}
}
package cn.edu.tju.app;
public class Plane extends Vehicle {
@Override
public void start() {
System.out.println("开动飞机");
}
}
3.定义工厂类
package cn.edu.tju.app;
public class VehicleFactory {
public Vehicle makeVehicle(String vehicleType){
if(vehicleType.equals("car")){
return new Car();
}
else if(vehicleType.equals("plane")){
return new Plane();
}
else {
return null;
}
}
}
4.定义主类,通过调用工厂类的方法来生产需要的对象,然后调用对象的方法
package cn.edu.tju.app;
public class SimpleFactoryTest {
public static void main(String[] args) {
VehicleFactory vehicleFactory=new VehicleFactory();
Vehicle vehicle = vehicleFactory.makeVehicle("car");
vehicle.start();
Vehicle vehicle2=vehicleFactory.makeVehicle("plane");
vehicle2.start();
}
}
5.运行结果:
二、静态工厂:静态工厂的前2步和简单工厂一样。第3步,定义工厂类,其中的方法都为静态方法
package cn.edu.tju.app;
public class StaticVehicleFactory {
public static Vehicle getCar(){
return new Car();
}
public static Vehicle getPlane(){
return new Plane();
}
}
主类定义如下,
package cn.edu.tju.app;
public class StaticFactoryTest {
public static void main(String[] args) {
Vehicle vehicle=StaticVehicleFactory.getCar();
vehicle.start();
Vehicle vehicle2=StaticVehicleFactory.getPlane();
vehicle2.start();
}
}
运行结果和简单工厂相同
三、工厂方法:不由一个工厂类来生产不同的产品,而是每一个工厂类只生产一种产品。
1.定义抽象类
package cn.edu.tju.app;
//定义交通工具抽象类
public abstract class Vehicle {
//定义"启动"抽象方法
public abstract void start();
}
2.定义上述抽象类的2个实现类
package cn.edu.tju.app;
public class Car extends Vehicle {
@Override
public void start() {
System.out.println("开动汽车");
}
}
package cn.edu.tju.app;
public class Plane extends Vehicle {
@Override
public void start() {
System.out.println("开动飞机");
}
}
3.定义两个工厂类,分别用来生产Car和Plane
package cn.edu.tju.app;
public class CarFactory {
public Car make(){
return new Car();
}
}
package cn.edu.tju.app;
public class PlaneFactory {
public Plane make(){
return new Plane();
}
}
4.定义主类,分别调用上述两个工厂类的make()方法来获取Car和Plane对象
package cn.edu.tju.app;
public class FactoryMethodTest {
public static void main(String[] args) {
CarFactory carFactory=new CarFactory();
Car car=carFactory.make();
car.start();
PlaneFactory planeFactory=new PlaneFactory();
Plane plane=planeFactory.make();
plane.start();
}
}
运行结果如下: