【设计模式-04】Factory工厂模式

这篇具有很好参考价值的文章主要介绍了【设计模式-04】Factory工厂模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简要描述

  • 简单工厂
  • 静态工厂
  • 工厂方法 FactoryMethod
    • 产品维度扩展
  • 抽象工厂
    • 产品一族进行扩展
  • Spring IOC

一、工厂的定义

  • 任何可以产生对象的方法或类,都可以称之为工厂
  • 单例也是一种工厂
  • 不可咬文嚼字,死扣概念
  • 为什么有了new之后,还要有工厂?
    • 灵活控制生产过程
    • 权限、日志、修饰...

二、FactoryMethod 工厂方法

  • 任意定制交通工具
    • 继承Movable接口
  • 任意定制生产过程
    • Movable XXXFactory.create()
  • 任意定义产品一族

1、定义Movable接口

/**
 * @description: 可移动的交通工具接口
 * @author: flygo
 * @time: 2022/7/5 10:00
 */
public interface Movable {

  void go();
}

2、定义Car汽车对象

/**
 * @description: 汽车对象
 * @author: flygo
 * @time: 2022/7/5 10:00
 */
public class Car implements Movable {

  @Override
  public void go() {
    System.out.println("Car go...");
  }
}

3、定义Plane飞机对象

/**
 * @description: 飞机对象
 * @author: flygo
 * @time: 2022/7/5 10:01
 */
public class Plane implements Movable {

  @Override
  public void go() {
    System.out.println("plane go...");
  }
}

4、定义汽车工厂类

/**
 * @description: 汽车工厂类
 * @author: flygo
 * @time: 2022/7/5 10:03
 */
public class CarFactory {

  Movable create() {
    return new Car();
  }
}

5、定义飞机工厂类

/**
 * @description: 飞机工程类
 * @author: flygo
 * @time: 2022/7/5 10:04
 */
public class PlaneFactory {

  Movable create() {
    return new Plane();
  }
}

6、定义主方法类

/**
 * @description: 主方法
 * @author: flygo
 * @time: 2022/7/5 10:01
 */
public class FactoryMain {

  public static void main(String[] args) {
    Movable carMovable = new CarFactory().create();
    carMovable.go();

    Movable planeMovable = new PlaneFactory().create();
    planeMovable.go();
  }
}

三、简单工厂方法

/**
 * @description: 简单工厂方法
 * @author: flygo
 * @time: 2022/7/5 10:11
 */
public class SimpleVehicleFactory {

  public Car createCar() {
    return new Car();
  }

  public Plane createPlane() {
    return new Plane();
  }
}

四、AbstractFactory抽象方法

例子描述:假如魔法人现代人两种类型的人,两种人都有食物武器交通工具三种产品

  • 三种产品描述
    • 食物:输出食物名称方法(printName())
    • 武器:射击方法(shoot())
    • 交通工具:驾驶方法(go())
  • 魔法人三种具体产品是:
    • 食物:毒蘑菇
    • 武器:魔法棒
    • 交通工具:魔法扫帚
  • 现代人三种具体的产品是:
    • 食物:面包
    • 武器:AK47
    • 交通工具:汽车

通过不同的工厂抽象方法实现不同人的所拥有的不同产品族

【设计模式-04】Factory工厂模式,MCA,# 设计模式,设计模式,java,Factory,工厂模式

1、定义抽象工厂、抽象产品类和方法

1.1、AbstractFactory 抽象工厂

/**
 * @description: 抽象工程方法
 * @author: flygo
 * @time: 2022/7/5 11:02
 */
public abstract class AbstractFactory {

  public abstract AbstractFood createFood();

  public abstract AbstractVehicle createVehicle();

  public abstract AbstractWeapon createWeapon();
}

1.2、AbstractFood 抽象的食物

/**
 * @description: 抽象的食物
 * @author: flygo
 * @time: 2022/7/5 11:03
 */
public abstract class AbstractFood {

  public abstract void printName();
}

1.3、AbstractVehicle抽象的交通工具

/**
 * @description: 抽象的交通工具
 * @author: flygo
 * @time: 2022/7/5 11:04
 */
public abstract class AbstractVehicle {
  public abstract void go();
}

1.4、AbstractVehicle抽象的武器

/**
 * @description: 抽象的武器
 * @author: flygo
 * @time: 2022/7/5 11:06
 */
public abstract class AbstractWeapon {
  public abstract void shoot();
}

2、定义魔法人具体工厂、产品类和方法

2.1、MagicFactory 魔法工厂类

MagicFactory 魔法工厂类 继承AbstractFactory 抽象工厂,同时实现抽象工厂方法

import tech.flygo.factory.abstractfactory.abstractf.AbstractFactory;
import tech.flygo.factory.abstractfactory.abstractf.AbstractFood;
import tech.flygo.factory.abstractfactory.abstractf.AbstractVehicle;
import tech.flygo.factory.abstractfactory.abstractf.AbstractWeapon;

/**
 * @description: 魔法工厂类
 * @author: flygo
 * @time: 2022/7/5 11:07
 */
public class MagicFactory extends AbstractFactory {

  @Override
  public AbstractFood createFood() {
    return new MashRoom();
  }

  @Override
  public AbstractVehicle createVehicle() {
    return new Broom();
  }

  @Override
  public AbstractWeapon createWeapon() {
    return new MagicStick();
  }
}

2.2、MashRoom 魔法蘑菇食物

MashRoom 魔法蘑菇食物 继承AbstractFood 抽象类型,同时实现抽象方法

import tech.flygo.factory.abstractfactory.abstractf.AbstractFood;

/**
 * @description: 魔法蘑菇食物
 * @author: flygo
 * @time: 2022/7/5 11:13
 */
public class MashRoom extends AbstractFood {

  @Override
  public void printName() {
    System.out.println("MashRoom food...");
  }
}

2.3、MagicStick 魔法棒定义

MagicStick 魔法棒 继承AbstractWeapon 抽象类型,同时实现抽象方法

import tech.flygo.factory.abstractfactory.abstractf.AbstractWeapon;

/**
 * @description: 魔法棒
 * @author: flygo
 * @time: 2022/7/5 11:15
 */
public class MagicStick extends AbstractWeapon {

  @Override
  public void shoot() {
    System.out.println("MagicStick shoot...");
  }
}

2.4、Broom 魔法棒定义

Broom 魔法扫帚 继承AbstractVehicle 抽象类型,同时实现抽象方法

import tech.flygo.factory.abstractfactory.abstractf.AbstractVehicle;

/**
 * @description: 魔法扫帚
 * @author: flygo
 * @time: 2022/7/5 11:11
 */
public class Broom extends AbstractVehicle {

  @Override
  public void go() {
    System.out.println("Broom go...");
  }
}

3、定义现代人具体工厂、产品类和方法

3.1、ModernFactory 现代工厂类

ModernFactory 现代工厂类 继承AbstractFactory 抽象工厂,同时实现抽象工厂方法

import tech.flygo.factory.abstractfactory.abstractf.AbstractFactory;
import tech.flygo.factory.abstractfactory.abstractf.AbstractFood;
import tech.flygo.factory.abstractfactory.abstractf.AbstractVehicle;
import tech.flygo.factory.abstractfactory.abstractf.AbstractWeapon;

/**
 * @description: 现代工厂类
 * @author: flygo
 * @time: 2022/7/5 11:16
 */
public class ModernFactory extends AbstractFactory {

  @Override
  public AbstractFood createFood() {
    return new Bread();
  }

  @Override
  public AbstractVehicle createVehicle() {
    return new Car();
  }

  @Override
  public AbstractWeapon createWeapon() {
    return new AK47();
  }
}

3.2、Bread 面包食物

Bread 面包食物食物 继承AbstractFood 抽象类型,同时实现抽象方法

import tech.flygo.factory.abstractfactory.abstractf.AbstractFood;

/**
 * @description: 面包食物
 * @author: flygo
 * @time: 2022/7/5 11:18
 */
public class Bread extends AbstractFood {

  @Override
  public void printName() {
    System.out.println("Bread...");
  }
}

3.3、AK47 武器AK47

AK47 武器AK47 继承AbstractWeapon 抽象类型,同时实现抽象方法

import tech.flygo.factory.abstractfactory.abstractf.AbstractWeapon;

/**
 * @description: 武器AK47
 * @author: flygo
 * @time: 2022/7/5 11:19
 */
public class AK47 extends AbstractWeapon {

  @Override
  public void shoot() {
    System.out.println("AK47 shoot...");
  }
}

3.4、Car汽车类定义

Car 汽车类 继承AbstractVehicle 抽象类型,同时实现抽象方法

import tech.flygo.factory.abstractfactory.abstractf.AbstractVehicle;

/**
 * @description: 汽车类
 * @author: flygo
 * @time: 2022/7/5 11:17
 */
public class Car extends AbstractVehicle {

  @Override
  public void go() {
    System.out.println("Car go...");
  }
}

4、定义 AbstractFactoryMain 抽象工厂方法主方法类

import tech.flygo.factory.abstractfactory.abstractf.AbstractFactory;
import tech.flygo.factory.abstractfactory.abstractf.AbstractFood;
import tech.flygo.factory.abstractfactory.abstractf.AbstractVehicle;
import tech.flygo.factory.abstractfactory.abstractf.AbstractWeapon;
import tech.flygo.factory.abstractfactory.magic.MagicFactory;

/**
 * @description: 抽象工厂方法主方法类
 * @author: flygo
 * @time: 2022/7/5 11:03
 */
public class AbstractFactoryMain {

  public static void main(String[] args) {

    System.out.println("-------生成一组产品族(魔法)-------");
    // 生成一组产品族(魔法)
    AbstractFactory magicFactory = new MagicFactory();

    AbstractFood food1 = magicFactory.createFood();
    food1.printName();

    AbstractWeapon weapon1 = magicFactory.createWeapon();
    weapon1.shoot();

    AbstractVehicle vehicle1 = magicFactory.createVehicle();
    vehicle1.go();

    System.out.println("-------生成一组产品族(现代)-------");
    // 生成一组产品族(现代)
    AbstractFactory modernFactory = new MagicFactory();

    AbstractFood food2 = modernFactory.createFood();
    food2.printName();

    AbstractWeapon weapon2 = modernFactory.createWeapon();
    weapon2.shoot();

    AbstractVehicle vehicle2 = modernFactory.createVehicle();
    vehicle2.go();
  }
}

输出结果

【设计模式-04】Factory工厂模式,MCA,# 设计模式,设计模式,java,Factory,工厂模式

四、源码地址

GitHub - jxaufang168/Design-Patterns: 设计模式学习设计模式学习. Contribute to jxaufang168/Design-Patterns development by creating an account on GitHub.https://github.com/jxaufang168/Design-Patterns



 文章来源地址https://www.toymoban.com/news/detail-784688.html

到了这里,关于【设计模式-04】Factory工厂模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

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

    概述        抽象工厂模式的基本思想是将一些相关的产品组成一个“产品族”,由同一个工厂统一生产。在工厂方法模式中具体工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法具有唯一性,一般情况下,一个具体工厂中只有一个或者一组重载的工

    2024年02月03日
    浏览(42)
  • 设计模式-创建型模式之抽象工厂模式(Abstract Factory)

    在工厂方法模式中具体工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法也具有唯一性,一般情况下,一个具体工厂中只有一个工厂方法或者一组重载的工厂方法。但是有时候我们需要 一个工厂可以提供多个产品对象 ,而不是单一的产品对象。 为了更

    2023年04月20日
    浏览(39)
  • C++11 设计模式4. 抽象工厂(Abstract Factory)模式

    从前面我们已经使用了工厂方法模式 解决了一些问题。 现在 策划又提出了新的需求:对于各个怪物,在不同的场景下,怪物的面板数值会发生变化,     //怪物分类:亡灵类,元素类,机械类     //战斗场景分类:沼泽地区,山脉地区,城镇。 那么就有9类怪物====沼泽地

    2024年04月14日
    浏览(42)
  • 大话设计模式——2.简单工厂模式(Simple Factory Pattern)

    定义:又称静态工厂方法,可以根据参数的不同返回不同类的实例,专门定义一个类(工厂类)来负责创建其他类的实例可通过类名直接调用,被创建的实例通常具有共同的父类。 UML图: 例子: 计算器中的加减乘除,可将不同的运算看成不同的对象,通过工厂类进行构建,

    2024年02月22日
    浏览(43)
  • 设计模式详解(一):工厂方法——Factory Method

    工厂方法是一种创建型设计模式。所谓创建型设计模式是说针对创建对象方面的设计模式。在面向对象的编程语言里,我们通过对象间的相互协作,共同完成复杂的业务逻辑,因而对象之间存在着依赖关系。 当对象A依赖对象B时,我们不采取直接创建对象B的方式,即 B produ

    2024年02月16日
    浏览(37)
  • 设计模式-抽象工厂模式(Abstract Factory Pattern)结构|原理|优缺点|场景|示例

     目录         设计模式(分类)        设计模式(六大原则)        创建型         工厂方法         抽象工厂模式        单例模式        建造者模式        原型模式      结构型         适配器模式        装饰器模式      

    2024年04月22日
    浏览(37)
  • Abstract Factory Pattern 抽象工厂模式简介与 C# 示例【创建型】【设计模式来了】

    一句话解释:   提供一个接口,以创建一系列相关或相互依赖的抽象对象,而无需指定它们具体的类。 (将一系列抽象类装进接口,一次接口实现,就必须实例化这一系列抽象类) 抽象工厂模式(Abstract Factory Pattern)是一种创建型模式。它用于创建一组相关对象的家族。

    2024年02月07日
    浏览(41)
  • Factory Method Pattern 工厂方法模式简介与 C# 示例【创建型】【设计模式来了】

    一句话解释:   实体类和工厂类均为单独实现,不影响已实现的类,方便扩展。 工厂方法模式(Factory Method Pattern)是一种创建型模式,它允许客户端通过工厂方法来创建对象,而不是直接使用构造函数。这样可以让客户端代码更加灵活,同时保持实现的独立性。工厂方法

    2024年02月06日
    浏览(41)
  • Simple Factory Pattern 简单工厂模式简介与 C# 示例【创建型】【设计模式来了】

    一句话解释:   客户类和工厂类严格分工,客户类只需知道怎么用,处理逻辑交给工厂类。 简单工厂模式(Simple Factory Pattern)是日常开发中常用的设计模式。其是一种简单的创建型模式,它通过一个工厂类来创建对象,客户端只需要知道如何使用工厂类,而不需要知道对

    2024年02月06日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包