设计模式的七大原则

设计模式最主要的目的就是解耦,低耦合,高内聚,扩展性,重用性,灵活,这些都是设计模式努力的方向。

  1. 重用性:相同功能的代码,可以复用
  2. 可读性:代码结构清晰简洁,编程规范,便于其他程序员阅读与理解
  3. 可扩展性:当需要增加新的功能的时候,非常方便
  4. 可靠性:增加新功能后,对原来功能没有影响

当然不是随随便便的模式都可以成为设计模式,设计模式也要遵守一定的设计原则。

单一职责模式
顾名思义,一个类应该只负责一项职责
作用:降低类复杂度,一个类只负责一项职责,提高类的可读性和维护性

接口隔离原则
客户端不应该依赖于它不需要的接口,一个类对另一类的依赖应该建立在最小的接口上,这样讲可能还是有点抽象,看下下面的伪代码理解下:

Interface A{
    Method a;
    Method b;
    Method c;
}
//假设现在有个实现类B,B只需要Method A和Method B方法,那么如果B实现了A,
//那么B就需要多实现一个Method c方法,而对于这个方法C,B并不需要。所以对于B来说,
//A并不是最小接口
class B implements A{
    //实现方法a
    //实现方法b
    //实现方法c
}

解决上述的问题就是把接口A,拆分为更小的接口

依赖倒转原则
1、高层模块不依赖于底层模块,二者应依赖于其抽象
2、抽象不应该依赖细节,细节应该依赖于抽象
3、其核心思想就是面向接口编程
4、对比细节实现的多变性,使用抽象比较稳定
5、使用接口和抽象就相当于制定好规范,然后让实现类根据规范去填充细节部分。

class QQ{ 
}
class QQ implements Tool{ 
}
class WeiChat implements Tool{ 
}
class People{
    public void get(QQ q){//这样写就相当于写死了,
            //后续如果要增加微信其他的,就需要直接修改这部分代码,所以不可取
    } 
    public void get(Tool t){//应采取这种方法
    } 
    
}

里氏替换原则
此原则通俗来讲就是不要去重写父类中已经实现的方法,一但修改容易对整个继承体系造成破坏,举个例子:

class A{
    public void a(){
        System.out.println("a");
    }
}
class B extends A{
     public void a(){//重写了父类中的a方法
        System.out.println("b");
    }
}
class C extends B{
    public void b(){
        a();//调用了a方法,C想要调用的是A中的a方法,
            //可是却不知道B对a方法进行了重写,所以这里就出现了问题
    }
}

建议:通过聚合,组合,依赖等来解决问题

开闭原则(OCP)
这个原则是最基础,也是最重要的原则。从字面上了解到意思就是对扩展开放,对修改关闭。
利用抽象来构建框架,使用实现来扩展细节。
当一个软件需要扩展功能的时候,我们不应该去修改原来已经有的功能代码。

迪米特原则
一个对象应该对其他的对象保持最少的了解,类与类直接关系或者了解越密切,其耦合性就越高。
这个原则又称最少知道原则,一个类应该对自己所依赖的类知道得越少越好。
迪米特原则,一个最简单的理解就是要与直接的朋友进行通信,何为直接朋友呢?
直接朋友:出现在成员变量、方法参数、方法返回值的类就是直接朋友,而在局部变量中出现的类就不是直接朋友,也就是说陌生类不要以局部变量的形式出现在类的内部。

合成复用原则
写代码的时候应尽量使用合成聚合的方式,而不是继承的方式,继承其实就是加大了类与类之间的耦合性

总结一下:
设计原则的核心:
1、将稳定的代码和变化的代码分离出来
2、面向接口编程
3、低耦合,高内聚

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值