首页 > 其他分享 >二十三天搞懂设计模式之抽象工厂模式

二十三天搞懂设计模式之抽象工厂模式

时间:2023-05-24 15:02:59浏览次数:47  
标签:二十三 Food abstract class extends Vehicle 搞懂 设计模式 public

文章目录

  • 抽象工厂模式
  • 1. 介绍
  • 2. 实现
  • 3. 代码
  • 4. 总结


抽象工厂模式

1. 介绍

意图:提供一个创建一系列相关或者依赖的接口,而无需指定他们具体的类

何时使用:系统的产品有多于一个产品族,而系统只消费其中某一族的产品,例子如下

当前有个换装游戏,进入不同的游戏场景需要选择不同的游戏套装,比如,正常的都市套装,里面包含的东西有:

  • 食物:面包
  • 武器:AK47
  • 车辆:宝马

这时候,一个吃着面包、拿着AK47、开着宝马的人物形象就跃然纸上,但是,当我们进入警察局时,如果我们的枪被警察看到,游戏将直接结束。

所以,我们需要进行一键换装,将我们的人物形象转换成吃着棒棒糖、拿着电脑、骑着滑板的形象,这样才可以进入警察局,完成我们的人物,接下来,我们来看下这种如何实现。

2. 实现

我们整体的结构图如下所示:

二十三天搞懂设计模式之抽象工厂模式_编程语言

我们将武器、食物、车辆封装成各自的抽象类,实现其不同的方法,如:AK47、Computer等

创建一个 AbstractFactory 的抽象工厂,用于生产一类产品族,生产武器、食物、车辆等

对于不同的场景,我们需要定制不同的工厂类

正常人的换装工厂,我们让其返回的是宝马、面包、AK47

警局的换装工厂,我们让其返回的是滑板、棒棒糖、电脑

main 中指定不同的换装工厂,即可完成该需求

3. 代码

  • Weapon:public abstract class Weapon {abstract void shoot();}
  • AK47:public class AK47 extends Weapon {...}
  • Computer:public class Computer extends Weapon {...}
  • Vehicle:public abstract class Vehicle {abstract void go();}
  • BMW:public class BMW extends Vehicle {...}
  • SkateBoard:public class SkateBoard extends Vehicle {...}
  • Food:public abstract class Food {abstract void printName();}
  • Bread:public class Bread extends Food {...}
  • StickCandy:public class StickCandy extends Food {...}
  • AbstractFactory
/**
 * 抽象工厂
 */
public abstract class AbstractFactory {
    abstract Food createFood();
    // 车辆
    abstract Vehicle createVehicle();
    // 武器
    abstract Weapon createWeapon();
}
  • CleverFactory
public class CleverFactory  extends AbstractFactory{
    @Override
    Food createFood() {
        return new StickCandy();
    }

    @Override
    Vehicle createVehicle() {
        return new SkateBoard();
    }

    @Override
    Weapon createWeapon() {
        return new Computer();
    }
}
  • ModerenFactory
public class ModerenFactory extends AbstractFactory {
    @Override
    Food createFood() {
        return new Bread();
    }

    @Override
    Vehicle createVehicle() {
        return new BMW();
    }

    @Override
    Weapon createWeapon() {
        return new AK47();
    }
}
  • 测试类
public class Main {
    public static void main(String[] args) {
        // 正常人走一段时间
        AbstractFactory abstractFactory = new ModerenFactory();
        // 进行赋值
        Vehicle vehicle = abstractFactory.createVehicle();
        Weapon weapon = abstractFactory.createWeapon();
        Food food = abstractFactory.createFood();
        // 走到警局,需要换装
        abstractFactory = new CleverFactory();
        // 进行赋值
        vehicle = abstractFactory.createVehicle();
        weapon = abstractFactory.createWeapon();
        food = abstractFactory.createFood();
    }
}

4. 总结

我们可以看到,通过以上的方式,我们可以瞬间完成服装的转换

我们在进行扩展的时候,也比较方便

假如我当前需要增加一个食物为汉堡,只需要继承我们的 Food 即可

抽象工厂也存在一定的缺点,当我需要增加一个产品为爱好,需要创建该抽象类,并且在 AbstractFactory 指定,这种扩展不太容易

当然,每一个东西有利必定有弊,我们在进行抽象工厂创建的时候,可以事先规划好这一批产品族的产品,防止后续再进行添加维护

标签:二十三,Food,abstract,class,extends,Vehicle,搞懂,设计模式,public
From: https://blog.51cto.com/u_16127529/6340850

相关文章

  • 二十三天搞懂设计模式之工厂模式
    文章目录1.定义2.工厂模式2.1实现2.2第一种方式代码3.总结1.定义在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。单例也是一种工厂为什么有了new之后,还要有工厂灵活控制生产过程权限、修饰、日志2.工厂模式2.......
  • C#设计模式——上
    文章目录设计模式序言-四大发明之活字印刷——面向对象思想的胜利四大发明之活字印刷——面向对象思想的胜利第一章面试受挫——代码无错就是好?第二章代码规范、重构第三章复制VS复用第四章业务的封装第五章体会简单工厂模式的美妙设计模式序言-四大发明之活字印刷——面向......
  • Java设计模式-原型模式
    简介原型模式是一种创建型设计模式,它允许在运行时通过复制现有对象来创建新对象,而不是通过构造函数创建。这个模式的核心思想是基于一个现有的对象克隆一个新的对象,这个过程对外部世界是透明的,就像对象从未被克隆过一样。原型模式的一个关键优点是可以避免在创建对象时重复性地......
  • C# 常用设计模式有哪些
    原文地址:C#常用设计模式有哪些-C#入门教程-.NET果糖网(donet5.com)C#中常用的设计模式有很多,以下列举几个常用的:1.工厂模式(FactoryPattern)通过工厂方法创建对象,隐藏对象的实例化过程,提供灵活性和可扩展性。1publicinterfaceIAnimal2{3voidSpeak();4......
  • JAVA设计模式之责任链模式
    文章目录一、责任链(ChainofResponsibility)模式二、责任链模式的结构三、源码四、纯的与不纯的责任链模式五、总结一、责任链(ChainofResponsibility)模式顾名思义,责任链模式(ChainofResponsibilityPattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发......
  • Java设计模式-组合模式
    简介在软件设计中,设计模式是一种被广泛接受和应用的经验总结,旨在解决常见问题并提供可复用的解决方案。组合模式是一种结构型设计模式,它允许将对象组合成树形结构以表示“部分-整体”的层次结构。这种模式能够使客户端以一致的方式处理单个对象和对象集合,将对象的组合与对象的使......
  • 设计模式——访问者模式
    访问者模式(VisitorPattern)是GoF提出的23种设计模式中的一种,属于行为模式。据《大话设计模式》中说算是最复杂也是最难以理解的一种模式了。定义(源于GoF《DesignPattern》):表示一个作用于某对象结构中的各元素的操作。ClassVisitor和MethodVisitor都是访问者模式......
  • 设计模式总结
    2023年05月21日18:17:36设计模式分类创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式、简单工厂模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式,共十一种:策略模式、模板方法模式......
  • Python 设计模式-观察者模式
    观察者模式是一种行为设计模式,它允许你定义一种订阅机制,可以在对象事件发生时通知多个观察者对象。下面是一个简单的Python观察者模式代码示例:classSubject:"""被观察者类,维护观察者列表,并在状态发生改变时通知观察者"""def__init__(self):self._......
  • 第二十三篇——通达信自动提示穿头破脚K线组合形态(从零起步编写通达信指标公式系列)
    今天给大家介绍一个比较应景的K线组合形态——穿头破脚。 一、穿头破脚介绍 穿头破脚K线组合形态由两根反向的K线组成,第二根K的实体部分要完全覆盖第一根K线的实体部分。可以分为顶部穿头破解和底部穿头破脚两类。(如下图)穿头破脚通常被视为反转信号,表明潜在的趋势......