设计模式-工厂模式

发布时间:2024年01月20日

大家好我是苏麟 , 今天聊聊工厂模式

此系列全是帮忙宣传 , 原创放在下面了 .

工厂模式

工厂?法模式也是?种创建型设计模式,简单??模式只有?个??类,负责创建所有产品,如果要添加新的产 品,通常需要修改??类的代码。????法模式引?了抽象??和具体??的概念,每个具体??只负责创建? 个具体产品,添加新的产品只需要添加新的??类??需修改原来的代码,这样就使得产品的?产更加灵活,?持 扩展,符合开闭原则。

工厂方法法模式分为以下几个角色:

  • 抽象工厂:?个接?,包含?个抽象的???法(?于创建产品对象)
  • 具体工厂:实现抽象??接?,创建具体的产品
  • 抽象产品:定义产品的接?
  • 具体产品:实现抽象产品接?,是??创建的对象

实际上???法模式也很好理解,就拿“?机Phone”这个产品举例,?机是?个抽象产品,???机、华为 ?机、苹果?机是具体的产品实现,?不同品牌的?机在各?的?产?家?产

应?场景

???法模式使得每个??类的职责单?,每个??只负责创建?种产品,当创建对象涉及?系列复杂的初始化逻 辑,?这些逻辑在不同的?类中可能有所不同时,可以使????法模式将这些初始化逻辑封装在?类的??中。 在现有的?具、库中,???法模式也有?泛的应?,?如:

  • Spring 框架中的 Bean ??:通过配置?件或注解,Spring 可以根据配置信息动态地创建和管理对象。
  • JDBC 中的 Connection ??:在 Java 数据库连接中, DriverManager 使????法模式来创建数据库连 接。不同的数据库驱动(如 MySQL、PostgreSQL 等)都有对应的??来创建连接。

基本实现

// 抽象产品
interface Shape {
    void draw();
}


//具体产品-圆形
class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("Circle");
    }
}

// 具体产品 - 正?形
class Square implements Shape {
    @Override
    public void draw() {
        System.out.println("Square");
    }
}
// 抽象??
interface ShapeFactory {
    Shape createShape();
}

// 具体?? - 创建圆形
class CircleFactory implements ShapeFactory {
    @Override
    public Shape createShape() {
        return new Circle();
    }
}

// 具体?? - 创建正?形
class SquareFactory implements ShapeFactory {
    @Override
    public Shape createShape() {
        return new Square();
    }
}

// 客户端代码
public class Client {
    public static void main(String[] args) {
        ShapeFactory circleFactory = new CircleFactory();
        Shape circle = circleFactory.createShape();
        circle.draw(); // 输出:Circle
        ShapeFactory squareFactory = new SquareFactory();
        Shape square = squareFactory.createShape();
        square.draw(); // 输出:Square
    }
}

原创地址 :?GitHub - youngyangyang04/kama-DesignPattern: 卡码网-23种设计模式精讲,每种设计模式都配套代码练习题,支持 Java,CPP,Python,Go

?

想要了解更多 :?工厂模式 | 菜鸟教程 (runoob.com)


这期就到这里 , 下期见!

文章来源:https://blog.csdn.net/sytdsqzr/article/details/135722316
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。