设计模式七大原则及分类

设计模式分类三种类型,共23种

1.创建型模式:单例模式,工厂模式,抽象工厂模式,原型模式,建造者模式 5种
2.结构型模式:代理模式,装饰模式,适配器模式,桥接模式,组合模式,外观模式,享元模式 7种
3.行为型模式:观察者模式,模板方法模式,命令模式,访问者模式,迭代器模式,中介者模式,
策略模式,备忘录模式,解释器模式,状态模式,责任链模式 11种

不同书对分类和名称有差别

设计模式目的
  • 提高代码可用性:相同功能的代码,不用多次编写
  • 可读性:编程规范性
  • 可扩展性:当需要增加新的功能时,非常方便
  • 可靠性:增加新的功能后,对原来的功能没有影响
  • 使程序高内聚、低耦合
常用的七大原则

    1.单一职责原则:各司其职,一个类只负责一项职责

  • 拆分多个类 ,成本高
  • 拆分多个方法
    2.接口隔离原则
    客户端不应该依赖它不需要的接口,即一个类对另外一个 类的依赖应该建立在最小的接口上.
    拆分接口到不同的接口
    3.依赖倒转(倒置)原则
  • 高层不应该依赖底层
  • 抽象不应该依赖细节
  • 面向接口编程

依赖关系传递的三种方式

  • 接口传递
  • 构造方法传递
  • setter 方法传递

4.里氏替换原则
在使用继承时,子类尽量不要重写父类的方法
新建一个基类,让原来的父类和子类都继承这个基类,采用依赖、
聚合、组合的方式来解决问题
5.开闭原则
一个软件实体如类、模块和函数应该对扩展开放,对修改关闭,用抽象构造框架,用实现扩展细节

通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化

代码实现

package test.design;

/**
 * @author fj
 * @version 1.0
 * @date 2020/11/14 22:38
 */
public class OcpTest {


    public static void main(String[] args) {
        GraphicEditor graphicEditor = new GraphicEditor();
        graphicEditor.drawShape(new Rectangle());
        graphicEditor.drawShape(new Circle());
        graphicEditor.drawShape(new Triangle());

    }

}


/**
 * 使用方
 */
class GraphicEditor{
    public void drawShape(Shape s){
        s.draw();
    }
}

/**
 * 基类
 */
abstract  class Shape{
    int type;

    /**
     * 抽象方法
     */
    public abstract void draw();
}


class Rectangle extends Shape{
    Rectangle(){
        super.type =1;
    }
    @Override
    public void draw() {
        System.out.println("绘制矩形");
    }
}

class Circle extends Shape{
    Circle(){
        super.type =2;
    }
    @Override
    public void draw() {
        System.out.println("绘制圆形");
    }
}

class Triangle extends Shape{
    Triangle(){
        super.type =3;
    }
    @Override
    public void draw() {
        System.out.println("绘制三角形");
    }
}

在画其他图形时不用在加类和判断,只需新增类继承即可。

6.迪米特法则 - 最少知道原则

  • 一个对象对其他对象了解最少
  • 类与类关系越密切,耦合度越大
  • 只与直接的朋友通信(有依赖关系的类)

7.合成复用原则

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容