Java 设计者模式以及与Spring关系(二)工厂和抽象工厂模式以及二者区别

发布时间:2024年01月19日

简介:

本文是个系列一次会出两个设计者模式作用,如果有关联就三个,除此外还会讲解在spring中作用。

23设计者模式以及重点模式

我们都知道设计者模式323种设计模式,标红是特别重要的设计者模式建议都会,而且熟读于心,标蓝是指其次重要建议也要明白。

(1)创建型模式:单例模式抽象工厂模式构建者模式工厂模式原型模式

(2)结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式

(3)行为型模式:访问者模式、模版方法模式命令模式、迭代器模式观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式。

工厂模式(Factory Pattern)

  • 目的:定义一个创建对象的接口,但让子类决定要实例化哪个类。
  • 使用场景:当你希望用户只知道接口而不关心具体实现时,如各种不同类型的数据库连接。
  • 实现方法:定义一个创建对象的接口,由子类实现这个接口来创建具体类型的对象。

说白我感觉只要一个接口,多次impl在实现,只要是实现一个想要结果,这种写法都可以叫做工厂。

示例

?

Spring中的使用:

Spring 使用工厂模式通过 BeanFactory 和 ApplicationContext 创建对象。这提供了一种灵活的方式来管理依赖关系。

抽象工厂模式(Abstract?Factory)

  • 目的:创建一系列相关或相互依赖的对象,而无需指定它们具体的类。
  • 使用场景:在抽象工厂模式中,一个抽象工厂定义了用于创建一组产品的方法,每个方法返回一个不同类型的产品。然后,具体的工厂子类实现这些方法来生成具体的产品。
  • 实现方法:定义一个接口用于创建相关的对象家族,不需要明确指定具体类。

简单说呢就是多重功能能力实现就叫抽象工厂

public interface Shape {
    void draw();
}

public class RoundedRectangle implements Shape {
    public void draw() {
        System.out.println("Inside RoundedRectangle::draw() method.");
    }
}

public interface ShapeFactory {
    Shape createShape();
}

public class RoundedRectangleFactory implements ShapeFactory {
    public Shape createShape() {
        // 调用其他实现类,实现其他功能
        return new RoundedRectangle();
    }
}

public class FactoryProducer {
    public static ShapeFactory getFactory(boolean rounded){   
        if(rounded){
            return new RoundedRectangleFactory();         
        } else {
            return new RectangleFactory();
        }
    }
}
在 Spring 中使用:

在 Spring 中,BeanFactory?提供了基本的依赖注入功能,并可以看作是工厂模式的实现。它主要负责创建和管理 bean,客户端通过 getBean 方法获取对象实例。

而 ApplicationContext 是 BeanFactory 的超集,提供了更全面的功能。它不仅包括工厂模式的特性(即创建对象),还提供了许多企业级的支持,这使得 ApplicationContext 更接近于抽象工厂模式的实现。ApplicationContext 能够管理并创建一系列相关的对象,并提供了框架级的服务。

工厂和抽象工厂区别

我觉得工厂和抽象工厂更像是理念上产物,如果一个类的实现,具有抽象工厂和工厂的特征,可以说他是抽象工厂好工厂也行。抽象工厂可以理解为是更高阶的工厂,工厂可能产出就是一个对象抽象具有多种能力。反正我是这么理解的如果不对你可以评论留言。

抽象工厂模式更适合于创建多个相关或相互依赖的产品也可以理解是工厂升级版,你看下面列子除了有Button 还有Checkbox ,而工厂方法模式更适合于一个产品但是有多个实现的情况。

示例

假设我们有一个应用,需要创建跨平台的 UI 组件(如按钮和复选框),这些组件在 Windows 和 MacOS 上有不同的样式:

public interface GUIFactory {
    Button createButton();
    Checkbox createCheckbox();
}

public class WinFactory implements GUIFactory {
    public Button createButton() {
        return new WinButton();
    }
    public Checkbox createCheckbox() {
        return new WinCheckbox();
    }
}

public class MacFactory implements GUIFactory {
    public Button createButton() {
        return new MacButton();
    }
    public Checkbox createCheckbox() {
        return new MacCheckbox();
    }
}

在这个示例中,GUIFactory?是一个抽象工厂,定义了创建按钮和复选框的方法。WinFactory?和 MacFactory?是具体的工厂,分别创建 Windows 和 MacOS 风格的组件。

使用工厂方法模式说明下和abstract 无关,其实工厂就是多种实现罢了

public abstract class DBConnectionFactory {
    abstract Connection createConnection();
}

public class MySqlConnectionFactory extends DBConnectionFactory {
    public Connection createConnection() {
        // 创建 MySQL 连接
    }
}

public class OracleConnectionFactory extends DBConnectionFactory {
    public Connection createConnection() {
        // 创建 Oracle 连接
    }
}

------------------------------------------与正文内容无关------------------------------------
如果觉的文章写对各位读者老爷们有帮助的话,麻烦点赞加关注呗!作者在这拜谢了!

如果你需要Java 、Python毕设、网页和系统设计,还有你是刚入职的新手需要度过试用期。联系方式微信:Romanticl99 网名:A乐神

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