设计模式(四)——抽象工厂模式(Abstract Factory)

78 篇文章 0 订阅
23 篇文章 0 订阅
设计模式(四)——抽象工厂模式
应用场景

简单的工厂模式只能返回一类的对象,现在有一个汽车工厂,可以生产轮胎、方向盘、座椅三种对象,宝马需要宝马轮胎,宝马方向盘和宝马座椅,而奔驰需要奔驰轮胎,奔驰方向盘和奔驰座椅,这时候就要用到抽象工厂。

先创建一个抽象类,可以生产 轮胎、方向盘和座椅。

package abstractfactory;

import abstractfactory.chair.Chair;
import abstractfactory.steer.Steer;
import abstractfactory.tyre.Tyre;

/**
 * @title: AbstractFactory
 * @Author 张宜强
 * @Date: 2022/4/6 17:39
 * @Effect:
 */
public abstract class AbstractFactory {
    //轮胎
    public abstract Tyre createTyre();
    //方向盘
    public abstract Steer createSteering();
    //座椅
    public abstract Chair createChair();
}

实现BCFactory,可以生产奔驰轮胎,奔驰方向盘和奔驰座椅

package abstractfactory;

import abstractfactory.chair.BCChair;
import abstractfactory.chair.Chair;
import abstractfactory.steer.BCSteer;
import abstractfactory.steer.Steer;
import abstractfactory.tyre.BCTyre;
import abstractfactory.tyre.Tyre;

/**
 * @title: BWFactory
 * @Author 张宜强
 * @Date: 2022/4/6 20:11
 * @Effect:
 */
public class BCFactory extends AbstractFactory{

    @Override
    public BCTyre createTyre() {
        return new BCTyre();
    }

    @Override
    public BCSteer createSteering() {
        return new BCSteer();
    }

    @Override
    public BCChair createChair() {
        return new BCChair();
    }
}

奔驰座椅

package abstractfactory.chair;

/**
 * @title: BCChair
 * @Author 张宜强
 * @Date: 2022/4/6 20:10
 * @Effect:
 */
public class BCChair extends Chair{
    @Override
    public void create(){
        System.out.println("奔驰座椅被生产");
    }
}

奔驰方向盘

package abstractfactory.steer;

/**
 * @title: BCSteer
 * @Author 张宜强
 * @Date: 2022/4/6 20:10
 * @Effect:
 */
public class BCSteer extends Steer{
    @Override
    public void create(){
        System.out.println("奔驰方向盘被生产");
    }
}

奔驰轮胎

package abstractfactory.tyre;

/**
 * @title: BCTyre
 * @Author 张宜强
 * @Date: 2022/4/6 20:11
 * @Effect:
 */
public class BCTyre extends Tyre{
    @Override
    public void create(){
        System.out.println("奔驰轮胎被生产");
    }
}

这样我就可以在main方法里面使用奔驰的工厂类里面来创建对象。

package abstractfactory;

import abstractfactory.chair.Chair;
import abstractfactory.steer.Steer;
import abstractfactory.tyre.Tyre;

/**
 * @title: Main
 * @Author 张宜强
 * @Date: 2022/4/6 17:29
 * @Effect:
 */
public class Main {
    public static void main(String[] args) {
        AbstractFactory BCfactory = new BCFactory();
        Tyre tyre = BCfactory.createTyre();
        tyre.create();
        Chair chair = BCfactory.createChair();
        chair.create();
        Steer steering = BCfactory.createSteering();
        steering.create();
    }
}

运行结果:

在这里插入图片描述

如果要生产宝马的零件,那现在只需要再创建一个BMFactory来生产宝马零件,不会对原来的代码进行改动,符合对拓展开放,对修改关闭

宝马轮胎

package abstractfactory.tyre;

/**
 * @title: BCTyre
 * @Author 张宜强
 * @Date: 2022/4/6 20:11
 * @Effect:
 */
public class BMTyre extends Tyre{
    @Override
    public void create(){
        System.out.println("宝马轮胎被生产");
    }
}

宝马方向盘

package abstractfactory.steer;

/**
 * @title: BCSteer
 * @Author 张宜强
 * @Date: 2022/4/6 20:10
 * @Effect:
 */
public class BMSteer extends Steer{
    @Override
    public void create(){
        System.out.println("宝马方向盘被生产");
    }
}

宝马座椅

package abstractfactory.chair;

/**
 * @title: BCChair
 * @Author 张宜强
 * @Date: 2022/4/6 20:10
 * @Effect:
 */
public class BMChair extends Chair{
    @Override
    public void create(){
        System.out.println("宝马座椅被生产");
    }
}

宝马工厂

package abstractfactory;
import abstractfactory.chair.BMChair;
import abstractfactory.steer.BMSteer;
import abstractfactory.tyre.BMTyre;

/**
 * @title: BWFactory
 * @Author 张宜强
 * @Date: 2022/4/6 20:11
 * @Effect:
 */
public class BMFactory extends AbstractFactory{

    @Override
    public BMTyre createTyre() {
        return new BMTyre();
    }

    @Override
    public BMSteer createSteering() {
        return new BMSteer();
    }

    @Override
    public BMChair createChair() {
        return new BMChair();
    }
}

代码结构

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张宜强

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值