美文网首页
工厂方法模式

工厂方法模式

作者: FredWhite | 来源:发表于2019-11-08 17:37 被阅读0次

定义

【创建型】定义一个用于创建对象的接口,让子类去决定具体实例化哪个类。

使用场景

在任何需要生成复杂对象的地方,都可以使用工厂模式。

用 new 就可以创建的对象,不需要使用工厂模式。

实现方式

背景:奔驰工厂准备建奔驰 A级、C级、E级
解决方案:采用工厂方法模式。

Product(抽象类)

// 奔驰车抽象类
public abstract class BenzCar {
    // 行驶
    public abstract void drive();
    // 自启动
    public abstract void autoStart();
    // 是否打开天窗
    public abstract void openSkylight(boolean isOpen);
}

Product(实现类)

奔驰A级

public class BenzA extends BenzCar {
    @Override
    public void drive() {
        System.out.println("奔驰A级开车");
    }

    @Override
    public void autoStart() {
        System.out.println("奔驰A级自启动");
    }

    @Override
    public void openSkylight(boolen isOpen) {
        String result = isOpen ? "打开天窗" : "关闭天窗";
        System.out.println("奔驰A级" + result);
    }
}

奔驰C级

public class BenzC extends BenzCar {
    @Override
    public void drive() {
        System.out.println("奔驰C级开车");
    }

    @Override
    public void autoStart() {
        System.out.println("奔驰C级自启动");
    }

    @Override
    public void openSkylight(boolen isOpen) {
        String result = isOpen ? "打开天窗" : "关闭天窗";
        System.out.println("奔驰C级" + result);
    }
}

奔驰E级

public class BenzE extends BenzCar {
    @Override
    public void drive() {
        System.out.println("奔驰E级开车");
    }

    @Override
    public void autoStart() {
        System.out.println("奔驰E级自启动");
    }

    @Override
    public void openSkylight(boolen isOpen) {
        String result = isOpen ? "打开天窗" : "关闭天窗";
        System.out.println("奔驰E级" + result);
    }
}

Factory(抽象类)

public abstract class BenzFactory {
    public abstract <T extends BenzCar> T createBenzCar(Class<T> clz);
}

Factory(实现类)

// 一个 Factory 实现类实现多个产品(相近的产品只需要一个产品线)
public class BenzCarFactory extends BenzFactory {
    public <T extends BenzCar> T createBenzCar(Class<T> clz) {
        BenzCar car = null;
        // 利用反射获取具体实例
        try {
            car = (BenzCar) Class.forName(clz.getName()).newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return car;
    }
}

测试

public class TestFactory {
    public static void main(String[] args) {
        // 构造工厂对象
        BenzFactory factory = new BenzCarFactory();
        // 生产产品
        BenzA benzA = factory.createBenzCar(BenzA.class);
        benzA.autoStart();
        benzA.drive();
        benzA.openSkylight(false);

        BenzC benzC = factory.createBenzCar(BenzC.class);
        benzC.autoStart();
        benzC.drive();
        benzC.openSkylight(true);

        BenzE benzE = factory.createBenzCar(BenzE.class);
        benzE.autoStart();
        benzE.drive();
        benzE.openSkylight(true);
    }
}

相关文章

  • 设计模式-3种工厂模式

    工厂模式包括:简单工厂模式,工厂方法模式,抽象工厂模式 简单工厂模式 工厂方法根据参数直接创建实例:工厂->产品 ...

  • 设计模式-工厂模式

    工厂模式概念 实例化对象,用工厂方法代替new操作。工厂模式包括工厂方法模式和抽象工厂模式。抽象工厂模式是工厂模式...

  • 设计模式-工厂方法模式

    1、工厂方法模式(Factory Method) 工厂方法模式分为三种: 普通工厂模式 多个工厂模式 静态工厂模式...

  • 设计模式 工厂模式

    工厂模式 工厂模式三大类1、简单工厂模式(静态工厂方法模式)2、工厂方法模式3、抽象工厂模式(Kit模式) 简单工...

  • python设计模式 - 工厂模式之工厂方法

    python 环境 工厂方法模式简介 工厂方法模式Factory Method,又称多态性工厂模式。在工厂方法模式...

  • 第一章2.0工厂- 基础类准备

    2.1工厂-简单工厂模式2.2工厂-工厂方法模式2.3工厂-抽象工厂模式

  • 建造模式

    包括:简单工厂、工厂方法、抽象工厂、单例模式、多例模式、建造模式、原始原型模式。 简单工厂:又名静态工厂方法模式,...

  • PHP-浅谈单例模式和工厂模式

    PHP中常用的设计模式有单例模式、工厂模式(简单工厂模式、工厂方法模式和抽象工厂方法模式)、适配模式、策略模式。 ...

  • 设计模式学习--工厂方法模式

    模式定义 工厂方法模式又称工厂模式,也叫虚拟构造器模式或者多态工厂模式,它属于类创建型模式。在工厂方法模式中,工厂...

  • 五分钟精通设计模式(三)之工厂方法模式

    工厂方法模式分为三种: 普通工厂方法模式、多个工厂方法模式、静态工厂方法模式 废话不多说,下面直奔主题,实现步骤:...

网友评论

      本文标题:工厂方法模式

      本文链接:https://www.haomeiwen.com/subject/cyfwbctx.html