软件设计-设计模式

版权声明:文章编写不易,转载请注明原链接 https://blog.csdn.net/u012184539/article/details/89524248

1. 工厂方法模式

也叫虚拟构造器模式,它定义一个用于创建对象的接口,让子类决定实例化那一个类,是一个雷的实例化延迟到其子类。在工程方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生产具体的产品对象,这样做的目的是产品雷的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体的产品类。
在这里插入图片描述
代码实现如下:
1.定义一个接口:

package org.zero01.test;

public interface Operation {

    public double getResult(double numberA,double numberB) throws Exception;

}

2.定义具体的计算类:

package org.zero01.test;

public class Add implements Operation{

    // 加法计算
    public double getResult(double numberA, double numberB) {

        return numberA + numberB;
    }
}

package org.zero01.test;

public class Sub implements Operation{

    // 减法计算
    public double getResult(double numberA, double numberB) {
        return numberA-numberB;
    }
}

package org.zero01.test;

public class Mul implements Operation{

    // 乘法计算
    public double getResult(double numberA, double numberB) {
        return numberA * numberB;
    }
}

package org.zero01.test;

public class Div implements Operation {

    // 除法计算
    public double getResult(double numberA, double numberB) throws Exception {
        if (numberB == 0) {
            throw new Exception("除数不能为0!");
        }
        return numberA / numberB;
    }
}

3.定义简单工厂类:

package org.zero01.test;

public class EasyFactory {

    // 简单工厂,根据字符串创建相应的对象
    public static Operation createOperation(String name) {
        Operation operationObj = null;
        switch (name) {
            case "+":
                operationObj = new Add();
                break;
            case "-":
                operationObj = new Sub();
                break;
            case "*":
                operationObj = new Mul();
                break;
            case "/":
                operationObj = new Div();
                break;
        }
        return operationObj;
    }
}

4.客户端代码:

package org.zero01.test;

public class Client {

    public static void main(String[] args) throws Exception {

        Operation add = EasyFactory.createOperation("+");
        Operation sub = EasyFactory.createOperation("-");
        Operation mul = EasyFactory.createOperation("*");
        Operation div = EasyFactory.createOperation("/");

        System.out.println(add.getResult(1, 1));
        System.out.println(sub.getResult(1, 1));
        System.out.println(mul.getResult(1, 1));
        System.out.println(div.getResult(1, 1));
    }
}

2. 抽象工厂方法模式

对于上面说的工厂方法模式,一个Operation工厂可以进行生产各种算术运算,若还需要建造另一个工厂用来进行逻辑运算,针对两个工厂的共性,可以创建一个抽象工厂,抽象工厂可以用来创建算数运算工厂和逻辑运算工厂。
在这里插入图片描述

3. 建造者模式(生成器模式)

将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式将不见和其组装过程分开,一步一步创建一个复杂的对象。用户只需要指定复杂对象的类型就可以得到该对象,而无须指导其内部的具体构造细节。
在这里插入图片描述
在这里插入图片描述

4. 原型模式

用原型实例制定创建对象的种类,并且通过复制这些原型创建新的对象。
原型模式允许一个对象再创建另外一个可定制的对象,无须指导任何创建的细节。
代码实现时,需要编写clone()函数,实现对象的复制。
在这里插入图片描述
在这里插入图片描述

5. 单例模式

确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。

6. 适配器模式

将一个类的接口转换成客户希望的另外一个接口。使得不相容的接口可以协同工作。
例如:A类构造需要一个ArrayList链表,B类构造需要一个数组,如何通过A类的数据来构造一个B类呢?这个时候就可以编写一个适配器,用来把ArrayList转换为数组。
在这里插入图片描述

7. 桥接模式(Bridge)

将抽象部分与它的实现部分分离,使它们都可以独立的变化。如果要绘制矩形、圆形、椭圆、正方形,至少需要4各形状类,但是如果绘制的图形需要具有不同的颜色,如红色、绿色、蓝色等,也需要多个个颜色类。这时候可以定义一个形状类和一个颜色类,进行中间桥接。
在这里插入图片描述

8. 组合模式

将对象组成树形结构以表示”部分-整体“的层次结构。使得用户对单个对象的组合对象的使用具有一致性。
组合模式描述了如何将容器对象和叶子对象进行递归组合,使得用户再使用时无须对它们进行区分,可以一致地对待容器对象和叶子对象。如下,对用户来说文件和文件都是同样的打开操作。

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

9. 装饰模式

动态的给一个对象添加一些额外的职责。提供了用子类扩展功能的一个灵活的替代,单比生产子类更为灵活。
装饰模式可以再不需要创造更多子类的情况下,将对象的功能加以扩展。
在这里插入图片描述

10 外观模式

定义了一个高层接口,为子系统中的一组接口提供一个一致的界面,从而简化子系统的使用。
在这里插入图片描述

11. 享元模式

提供支持大量细粒度对象共享的有效方法。
享元模式通过共享技术实现相同或相似对象的重用。

12. 代理模式

给某一个对象提供一个代理,并由代理对象控制对元对象的引用。
在这里插入图片描述

13. 解释器

定义语言的文法,并且建立一个解释器来解释该语言中的句子,这里语言意思是使用规定格式的语法的代码。
例:构造一个解释器,使系统可以执行整数间的乘、除和求模运算,如用户输入表达式 3*4/2%4 ,输出结构为2.

14 模板方法

定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
在这里插入图片描述
在这里插入图片描述

15 责任链

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

猜你喜欢

转载自blog.csdn.net/u012184539/article/details/89524248