设计模式——工厂模式

本文介绍了三种工厂模式,包括简单工厂模式、工厂方法模式和抽象工厂模式。阐述了各模式的简介、优缺点,并给出示例代码。简单工厂模式根据参数返回实例,但修改产品需改工厂逻辑;工厂方法模式将创建工作交子类,遵循‘开放—封闭’原则;抽象工厂模式能生产多种产品。三种模式均属创建型模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单工厂模式

简介

简单工厂模式:根据参数的不同,返回不同类的实例。返回的实例通常具有相同的父类(一般是接口)。

优点

  • 工厂类中包含了逻辑判断,只需要根据客户端的条件生成相关对象。

缺点

  • 每次增加产品类都需要修改工厂类中的相关逻辑。没有遵循“开放—封闭”原则。

示例代码

public interface Shape {
    void draw();
}
public class Rectangle implements Shape {
    @Override
    public void draw() {
        System.out.println("Rectangle.draw()");
    }
}
public class Square implements Shape {
    @Override
    public void draw() {
        System.out.println("Square.draw()");
    }
}
public class SimpleFactory {

    public Shape getShape(String shapeType) {
        if (shapeType == null) {
            return null;
        }else if ("Rectangle".equalsIgnoreCase(shapeType)) {
            return new Rectangle();
        }else if ("Square".equalsIgnoreCase(shapeType)) {
            return new Square();
        }else {
            return null;
        }
    }
}
public class SimpleFactoryTest {
    public static void main(String[] args) {
        SimpleFactory factory = new SimpleFactory();
        Shape shape = factory.getShape("square");
        shape.draw();
    }
}

工厂方法模式

简介

工厂方法模式:将创建对象的工作交给了对应的工厂子类。定义一个创建对象的工厂接口,但是该接口创建什么对象,需要由子类来决定。每个产品(对象)都有对应的工厂。

优点

  • 简单工厂模式的进一步抽象。
  • 遵循了“开放—封闭”原则。

缺点

  • 把逻辑判断转移到了客户端。
  • 每个工厂只能产生一种产品。
  • 每增加一种产品,就需要增加一个对应产品的工厂类。

示例代码

public interface Shape {
    void draw();
}
public class Square implements Shape {
    @Override
    public void draw() {
        System.out.println("Square.draw()");
    }
}
public interface Factory {

    Shape getShape();
}
public class SquareFactory implements Factory{
    @Override
    public Shape getShape() {
        return new Square();
    }
}
public class FactoryTest {
    public static void main(String[] args) {
        Factory factory = new SquareFactory();
        Shape shape = factory.getShape();
        shape.draw();
    }
}

抽象工厂模式

简介

抽象工厂模式:工厂方法模式中,一个工厂只能产生一种产品,而抽象工厂能产生多种产品。例如某品牌的电子产品工厂,不仅生产该品牌的手机,还有平板电脑,电视机等。

优点

  • 遵循了“开放—封闭”原则。
  • 可以生产一系列产品。

缺点

  • 把逻辑判断转移到了客户端。
  • 每增加一种产品,就需要增加一个对应产品的工厂类。

示例代码

public interface Color {
    void fill();
}
public class Red implements Color {
    @Override
    public void fill() {
        System.out.println("red.fill()...");
    }
}
public interface Shape {
    void draw();
}
public class Rectangle implements Shape {
    @Override
    public void draw() {
        System.out.println("rectangle.draw()...");
    }
}
public abstract class AbstractFactory {
    public abstract Shape getShape();
    public abstract Color getColor();
}
public class RectangleAndRedFactory extends AbstractFactory {
    @Override
    public Shape getShape() {
        return new Rectangle();
    }

    @Override
    public Color getColor() {
        return new Red();
    }
}
public class Main {
    public static void main(String[] args) {
        AbstractFactory factory = new RectangleAndRedFactory();
        Color color = factory.getColor();
        Shape shape = factory.getShape();
        color.fill();
        shape.draw();
    }
}

小结

  • 简单工厂模式、工厂方法模式、抽象工厂模式都属于创建型模式。
  • 工厂方法模式中弥补了简单工厂模式的不足——不遵循“开放-封闭“原则。
  • 抽象工厂模式中弥补了工厂模式的不足——一个工厂只能生产一种产品。
在电子设计自动化(EDA)领域,Verilog HDL 是一种重要的硬件描述语言,广泛应用于数字系统的设计,尤其是在嵌入式系统、FPGA 设计以及数字电路教学中。本文将探讨如何利用 Verilog HDL 实现一个 16×16 点阵字符显示功能。16×16 点阵显示器由 16 行和 16 列的像素组成,共需 256 个二进制位来控制每个像素的亮灭,常用于简单字符或图形显示。 要实现这一功能,首先需要掌握基本的逻辑门(如与门、或门、非门、与非门、或非门等)和组合逻辑电路,以及寄存器和计数器等时序逻辑电路。设计的核心是构建一个模块,该模块接收字符输入(如 ASCII 码),将其转换为 16×16 的二进制位流,进而驱动点阵的 LED 灯。具体而言,该模块包含以下部分:一是输入接口,通常为 8 位的 ASCII 码输入,用于指定要显示的字符;二是内部存储,用于存储字符对应的 16×16 点阵数据,可采用寄存器或分布式 RAM 实现;三是行列驱动逻辑,将点阵数据转换为驱动 LED 矩阵的信号,包含 16 个行输出线和 16 个列使能信号,按特定顺序选通点亮对应 LED;四是时序控制,通过计数器逐行扫描,按顺序控制每行点亮;五是复用逻辑(可选),若点阵支持多颜色或亮度等级,则需额外逻辑控制像素状态。 设计过程中,需用 Verilog 代码描述上述逻辑,并借助仿真工具验证功能,确保能正确将输入字符转换为点阵显示。之后将设计综合到目标 FPGA 架构,通过配置 FPGA 实现硬件功能。实际项目中,“led_lattice”文件可能包含 Verilog 源代码、测试平台文件、配置文件及仿真结果。其中,测试平台用于模拟输入、检查输出,验证设计正确性。掌握 Verilog HDL 实现 16×16 点阵字符显示,涉及硬件描述语言基础、数字逻辑设计、字符编码和 FPGA 编程等多方面知识,是学习
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值