一、简单工厂:使用工厂类代替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(); } }
运行结果如下:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)