类B和类C各自实现接口I

时间:2022-02-27 06:08:00

1.   开闭原则(Open-Closed Principle, OCP)

界说:软件实体该当对扩展开放,对改削*。这句话说得有点专业,更通俗一点讲,也就是:软件系统中包罗的各类组件,例如模块(Modules)、类(Classes)以及成果(Functions)等等,应该在不改削现有代码的根本上,去扩展新成果。开闭原则中原有“开”,是指对付组件成果的扩展是开放的,是允许对其进行成果扩展的;开闭原则中“闭”,是指对付代码的改削是关闭的,即不应该改削原有的代码。

问题由来:凡事的孕育产生都有缘由。我们来看看,开闭原则的孕育产生缘由。在软件的生命周期内,因为变革、升级和维护等原因需要对软件原有代码进行改削时,可能会给旧代码中引入错误,也可能会使我们不得不同错误整个成果进行重构,并且需要原有代码颠末从头测试。这就对我们的整个系统的影响出格大,这也丰裕展现出了系统的耦合性如果太高,会大大的增加后期的扩展,维护。为了解决这个问题,故人们总结出了开闭原则。解决开闭原则的根柢其实还是在解耦合。所以,我们面向东西的开发,我们最根柢的任务就是解耦合。 

解决要领:当软件需要变革时,尽量通过扩展软件实体的行为来实现变革,而不是通过改削已有的代码来实现变革。 

小结:开闭原则具有抱负主义的色彩,说的很抽象,它是面向东西设计的终极方针。其他几条原则,则可以看做是开闭原则的实现。我们要用抽象构建框架,用实现扩展细节。

2.    单一职责原则(Single Responsibility Principle)

界说:一个类,只有一个引起它变革的原因。即:应该只有一个职责。

每一个职责都是变革的一个轴线,如果一个类有一个以上的职责,这些职责就耦合在了一起。这会导致脆弱的设计。当一个职责产生变革时,可能会影响其它的职责。此外,多个职责耦合在一起,会影响复用性。例如:要实现逻辑和界面的疏散。需要说明的一点是单一职责原则不但是面向东西编程思想所特有的,只要是模块化的措施设计,都需要遵循这一重要原则。 

问题由来:类T卖力两个差此外职责:职责P1,职责P2。当由于职责P1需求产生转变而需要改削类T时,有可能会导致原本运行正常的职责P2成果产生故障。 

解决要领:分袂成立两个类T1、T2,使T1完成职责P1成果,T2完成职责P2成果。这样,当改削类T1时,不会使职责P2产生故障危害;同理,当改削T2时,也不会使职责P1产生故障危害。

3.    里氏替换原则(Liskov Substitution Principle) 

界说:子类型必需能够替换失它们的父类型。注意这里的能够两字。有人也戏称老鼠的儿子会打洞原则。

问题由来:有一成果P1,由类A完成。现需要将成果P1进行扩展,扩展后的成果为P,此中P由原有成果P1与新成果P2构成。新成果P由类A的子类B来完成,则子类B在完成新成果P2的同时,有可能会导致原有成果P1产生故障。 

解决要领:类B担任类A时,除添加新的要领完成新增成果P2外,尽量不要重写父类A的要领,也尽量不要重载父类A的要领 

小结:所有引用父类的处所必需能透明地使用其子类的东西。子类可以扩展父类的成果,但不能转变父类原有的成果,即:子类可以实现父类的抽象要领,子类也中可以增加本身特有的要领,但不能笼罩父类的非抽象要领。当子类的要领重载父类的要领时,要领的前置条件(即要领的形参)要比父类要领的输入参数更宽松。当子类的要领实现父类的抽象要领时,要领的后置条件(即要领的返回值)要比父类更严格。

4.    迪米特法例(Law Of Demeter)

 界说:迪米特法例又叫最少知道原则,即:一个东西应该对其他东西连结最少的了解。如果两个类不必相互直接通信,那么这两个类就不该当产生直接的彼此感化。如果此中一个类需要挪用另一个类的某一个要领的话,可以通过圈外人转发这个挪用。简单界说为只与直接的伴侣通信。首先来解释一下什么是直接的伴侣:每个东西城市与其他东西有耦合关系,只要两个东西之间有耦合关系,我们就说这两个东西之间是伴侣关系。耦合的方法很多,依赖、关联、组合、聚合等。此中,我们称呈现成员变量、要领参数、要领返回值中的类为直接的伴侣,而呈此刻局部变量中的类则不是直接的伴侣。也就是说,陌生的类最好不要作为局部变量的形式呈此刻类的内部。

问题由来:类与类之间的关系越密切,耦合度越大,当一个类产生转变时,对另一个类的影响也越大。