设计模式:11-简单工厂、静态工厂、工厂方法

设计模式:11-简单工厂、静态工厂、工厂方法,第1张

设计模式:11-简单工厂、静态工厂、工厂方法

一、简单工厂:使用工厂类代替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();

    }
}

运行结果如下:

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5694631.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存