栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

设计模式: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();

    }
}

运行结果如下:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/694168.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号