创建型设计模式

2023-12-24 16:38:37

一、六大基本原则

1、单一职责原则

一个类只能有一个职责。一个类(大到模块,小到方法)承担的职责越多,它被复用的可能性就越小,而且一个类承担的职责过多,就相当于将这些职责耦合在一起,当其中一个职责变化时,可能会影响其他职责的运作,因此要将这些职责进行分离,将不同的职责封装在不同的类中。

2、开闭原则

一个软件实体应该对扩展开放,对修改关闭。即软件实体尽量在不修改原有代码的情况下进行扩展。

3、里氏代换原则

所有引用父类的地方必须能透明地使用其子类的对象。

4、依赖倒置原则

高层模块不应该依赖低层模块,抽象不应该依赖细节,细节应该依赖抽象。要面向接口编程,不要面向实现编程。

5、接口隔离原则

使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。当一个接口太大时,我们需要考虑将它分离成一个更小的接口。

6、迪米特法则

尽量减少对象之间的交互,如果两个对象之间不必彼此直接通信,那么这两个对象就不应当发生任何直接的相互作用,如果其中一个对象需要调用另一个对象的某一个方法的话,可以通过第三者转发这个调用。

二、设计模式总览

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、具体代码实现

工厂设计模式

??模式?称???法模式,是?种创建型设计模式,其在?类中提供?个创建对象的?法, 允许?类 决定实例化对象的类型。

这种设计模式也是 Java开发中最常?的?种模式,它的主要意图是定义?个 创建对象的接?,让其? 类??决定实例化哪?个??类,??模式使其创建过程延迟到?类进?。

简单说就是为了提供代码结构的扩展性,屏蔽每?个功能类中的具体实现逻辑。让外部可以更加简单的 只是知道调?即可,同时,这也是去掉众多ifelse的?式。

当然这可能也有?些缺点,?如需要实现 的类?常多,如何去维护,怎样减低开发成本。但这些问题都可以在后续的设计模式结合使?中,逐步 降低。

抽象工厂设计模式

抽象工厂设计模式(Abstract Factory Design Pattern)是一种创建型设计模式,旨在提供一个接口用于创建相关或依赖对象的家族,而无需明确指定它们的具体类。这种模式属于工厂模式的一种扩展,它通过提供一个接口来创建一系列相关或相互依赖的对象,而不需要指定这些对象的具体类。

建造者设计模式

建造者模式所完成的内容就是通过将多个简单对象通过?步步的组装构建出?个复杂对象的过程。

它的主要目的是将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。

原型设计模式

原型模式主要解决的问题就是创建重复对象。这部分对象内容本身比较复杂,生成过程耗时较长,因此使用clone()方法节省时间

这种场景经常出现在我们身边,只不过很少用到自己的开发中,就像CV复制代码,类中的clone()方法。

单例设计模式

单例模式是整个设计中最简单的模式之一。

单例模式主要解决的是哪怕多线程同时访问,一个类也只能有一个实例。

本节介绍7种单例模式的实现:懒汉模式(线程不安全)、懒汉模式(线程安全)、饿汉模式(线程安全)、使用类的内部类(线程安全)、双重锁校验(线程安全)、CAS[AtomicReference](线程安全)、Effective Java作者推荐的枚举单例(线程安全)。

五种设计模式的主要代码以及实现包

代码实现在文章顶部显示,由于代码量较大,再次仅贴出代码目录以及部分代码,不过多占用文章篇幅。
在这里插入图片描述
抽象工厂:

public class Client {
    private Button button;
    private Window window;

    public Client(GUIFactory factory){
        button = factory.createButton();
        window = factory.createWindow();
    }

    public void renderUI(){
        button.render();
        window.render();
    }

    public static void main(String[] args) {
        GUIFactory factory;
        String name = System.getProperty("os.name").toLowerCase();

        if(name.contains("windows")){
            factory = new WindowsGUIFactory();
        }else{
            factory = new MacOSGUIFactory();
        }

        Client client = new Client(factory);
        client.renderUI();
    }
}

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