学习总结录 学习总结录
首页
归档
分类
标签
  • Java基础
  • Java集合
  • MySQL
  • Redis
  • JVM
  • 多线程
  • 计算机网络
  • 操作系统
  • Spring
  • Kafka
  • Elasticsearch
  • Python
  • 面试专题
  • 案例实践
  • 工具使用
  • 项目搭建
  • 服务治理
  • ORM框架
  • 分布式组件
  • MiniSpring
  • 设计模式
  • 算法思想
  • 编码规范
友链
关于
GitHub (opens new window)
首页
归档
分类
标签
  • Java基础
  • Java集合
  • MySQL
  • Redis
  • JVM
  • 多线程
  • 计算机网络
  • 操作系统
  • Spring
  • Kafka
  • Elasticsearch
  • Python
  • 面试专题
  • 案例实践
  • 工具使用
  • 项目搭建
  • 服务治理
  • ORM框架
  • 分布式组件
  • MiniSpring
  • 设计模式
  • 算法思想
  • 编码规范
友链
关于
GitHub (opens new window)
  • 设计模式

    • 设计模式-工厂模式
      • 设计模式-工厂模式
      • 介绍
      • 案例
    • 设计模式-抽象工厂模式
    • 设计模式-单例模式
    • 设计模式-建造者模式
    • 设计模式-原型模式
    • 设计模式-适配器模式
    • 设计模式-桥接模式
    • 设计模式-组合模式
    • 设计模式-外观模式
    • 设计模式-装饰模式
    • 设计模式-享元模式
    • 设计模式-代理模式
    • 设计模式-职责链模式
    • 设计模式-命令模式
    • 设计模式-迭代器模式
    • 设计模式-中介者模式
    • 设计模式-观察者模式
    • 设计模式-状态模式
    • 设计模式-策略模式
  • 算法思想

  • 编码规范

  • 技术思想
  • 设计模式
旭日
2023-03-27
目录

设计模式-工厂模式

# 设计模式-工厂模式

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

# 介绍

现在我们如果需要一台电脑,那么我们就去工厂里面提货,我们不用关心电脑是如何产生出来的,也不用关心这个电脑的内部。

**目的:**定义一个工厂,外部传来什么,工厂就返回什么。

优点:

  • 一个调用者想创建一个对象,只要知道其名称就可以了。

  • 扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。

  • 屏蔽产品的具体实现,调用者只关心产品的接口。

缺点:

  • 在添加新产品时需要编写新的具体产品类,而且还要提供与之对应的具体工厂类。系统中类的个数将会成对增加,在一定程序上增加了系统的复杂度。
  • 由于考虑到系统的可扩展性,需要映入抽象层,在客户端代码中均使用抽象层进行定义,增加了系统的抽象性和理解难度。

适用环境:

  • 客户端不知道它所需要的对象的类。
  • 抽象工厂类通过其子类来指定创建哪个对象。

# 案例

图形接口:

/**
 * Description 图形接口
 * Date 2022/3/11 22:03
 * Version 1.0.1
 *
 * @author Wen
 */
public interface Shape {
    /**
     * 画图
     */
    void draw();
}

三个图形:

/**
 * Description 圆形
 * Date 2022/3/11 22:07
 * Version 1.0.1
 *
 * @author Wen
 */
public class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("Circle的draw方法");
    }
}
/**
 * Description 长方形
 * Date 2022/3/11 22:05
 * Version 1.0.1
 *
 * @author Wen
 */
public class Rectangle implements Shape{
    @Override
    public void draw() {
        System.out.println("Rectangle的draw方法");
    }
}

image-20220311224917925

工厂:

/**
 * Description 图形工厂
 * Date 2022/3/11 22:23
 * Version 1.0.1
 *
 * @author Wen
 */
public class ShapeFactory {
    public Shape getShape(String shapeType){
        if(shapeType == null){
            return null;
        }
        if("CIRCLE".equalsIgnoreCase(shapeType)){
            return new Circle();
        } else if("RECTANGLE".equalsIgnoreCase(shapeType)){
            return new Rectangle();
        } else if("SQUARE".equalsIgnoreCase(shapeType)){
            return new Square();
        }
        return null;
    }
}

实现:

/**
 * Description 案例
 * Date 2022/3/11 22:25
 * Version 1.0.1
 *
 * @author Wen
 */
public class FactoryPatternDemo {
    public static void main(String[] args) {
        ShapeFactory shapeFactory = new ShapeFactory();

        //获取 Circle 的对象,并调用它的 draw 方法
        Shape shape1 = shapeFactory.getShape("CIRCLE");

        //调用 Circle 的 draw 方法
        shape1.draw();

        //获取 Rectangle 的对象,并调用它的 draw 方法
        Shape shape2 = shapeFactory.getShape("RECTANGLE");

        //调用 Rectangle 的 draw 方法
        shape2.draw();

        //获取 Square 的对象,并调用它的 draw 方法
        Shape shape3 = shapeFactory.getShape("SQUARE");

        //调用 Square 的 draw 方法
        shape3.draw();
    }
}


Circle的dra
#设计模式
上次更新: 2024/06/29, 15:13:44
设计模式-抽象工厂模式

设计模式-抽象工厂模式→

最近更新
01
基础概念
10-31
02
Pytorch
10-30
03
Numpy
10-30
更多文章>
Theme by Vdoing | Copyright © 2021-2024 旭日 | 蜀ICP备2021000788号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式