23种设计模式(1)六大原则

23种设计模式(1)六大原则

设计模式是什么:
设计模式是在开发中解决问题的一种方案,或者说它是一种“可以更好使用代码的方法”,且不受限于代码的复杂性或代码量的多少,在面对不同的情况可以使用不同的设计模式,比如可以用在一小段代码中来使这段代码有更好的安全性或更好的节省资源(例如单例模式),也可以作用在整个项目,让你的代码有更好的扩展性或便捷性(例如工厂模式),目前共有23种设计模式

设计模式三大类

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

六大原则

一、单一职责原则:

单一职责原则(Single Responsibility Principle, SRP):一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因。

一个类不能负担太多职责,当一个类负责太多功能时,就会造成当一个功能发生变化时,会影响到其他功能的使用,我们需要将不同的功能封装在不同的类中,而那些功能相同且总是同时发生变化的类则可以归纳到一起,以达到“高内聚、低耦合”的目的,属于原理简单但难以运作的类型,需要极好的分析能力及实践经验

二、开闭原则

开闭原则(Open-Closed Principle, OCP):一个软件实体应当对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。

软件实体可以指一个软件模块或一个/多个类的功能代码,当需求随着时间推移而发生变化,我们应该保证目前的框架是稳定的,在不修改当前代码的情况下对功能进行扩展,前提是要遵循开闭原则
Java中提供了抽象类、接口等机制,我们构建一个稳定的抽象层,在实现层中实现具体的功能,当产生新需求时,无需改变抽象层,只需在实现层中添加新的类,实现不修改已有代码即可扩展系统功能的目的。

三、里氏替换原则

里氏代换原则(Liskov Substitution Principle, LSP):所有引用基类(父类)的地方必须能透明地使用其子类的对象。

在代码中,将一个基类替换成它的子类,程序不会出现任何错误,反过来不一定成立,将一个子类替换成它的父类,则不一定能够正常编译
里氏替换原则是实现开闭原则的重要方式之一,由于使用基类对象的地方都能够使用子类对象,所以在程序中尽量使用基类,在运行后再确认子类类型,用子类对象来替换父类对象

注:
1、子类需要调用的方法必须要父类中声明,或子类需要实现父类中的所有方法,否则在调用时会出现方法不存在或没有具体实现方法
2、在使用里氏替换原则时,我们尽量把父类定义为抽象类或接口,并在子类中实现方法,运行时,子类对象替换父类对象。实现开闭原则时,不需要修改子类对象,只需要新增一个子类,用新增的子类来替换父类即可
3、不仅仅是父子类之间,定义成员变量、局部变量、方法返回类型等都可以使用该原则

四、依赖倒置原则

依赖倒转原则(Dependency Inversion Principle, DIP):抽象不应该依赖于细节,细节应当依赖于抽象。换言之,要针对接口编程,而不是针对实现编程。

在程序中,我们尽量使用层次高的抽象层,使用抽象类或接口进行变量类型声明、参数类型声明、方法返回类型声明等,不需要具体类来进行这些操作,因此具体类只需要实现接口或抽象类中的方法,而不需要再编写更多的方法,防止无法调用的问题出现

五、接口隔离原则

接口隔离原则(Interface Segregation Principle, ISP):使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。

一个接口只需要承担一些具体的相对无法替代的功能即可,即一个接口是一个方法的集合,这些方法只需要做自己该负责的事情,不需要做其他无关的事情
在调用接口时,根据功能找到对应的接口,再调用需要的方法,不依赖那些不需要的接口

六、迪米特法则

迪米特法则(Law of Demeter, LoD):一个软件实体应当尽可能少地与其他实体发生相互作用。

一个软件实体需要尽量少的影响其他模块,这样在自己本身变动的情况下,不会造成其他模块的异常,扩展相对容易,迪米特法则可降低系统的耦合度,使类与类之间保持松散的耦合关系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值