设计模式-初-七大原则(1)

    科技2024-05-14  68

    软件设计的金科律令

    复用 变化是复用最大的挑战,所以设计模式主要解决的就是变化中的复用性 使用面向对象设计的最大优势是抵御变化 雕版印刷与活字印刷

    面向对象

    底层思维层面

    封装,继承,多态

    抽象思维层面

    从宏观层次讲,面向对象的构建方式可以更加适应软件的变化,能将变化带来的影响减为最小从微观层次来说,面向对象的方式更加强调类的“责任”,由于需求变化导致新增类型不影响原来的类型的实现,是各司其职。对象是什么? 从语言实现层次上来看,对象封装了代码和数据从规格层次上讲,对象是一系列可以实现的公共接口从概念层次讲,对象是某种拥有责任的抽象

    如何解决编程中的复杂性?

    分解 即分而治之,将大的问题分解为多个小问题,将复杂的问题分解为简单的问题抽象 由于不能掌握所有的复杂对象,所以选择忽略他的非本质细节而去处理泛化和理想化了的对象模型

    面向对象七大设计原则

    依赖倒置原则 高层模块(稳定)不应该依赖于底层模块(变化),二者都应该依赖于抽象(稳定),抽象(稳定)不应该依赖于实现细节(变化),实现细节应该依赖于抽象(稳定)通过对底层模块的隔离变化,也就是底层类依赖于抽象类 开放封闭原则 对扩展开放,对更改关闭类模板应该是可扩展的,但是不可以修改 单一职责原则 一个类应该仅有一个引起他变化的类,例如防止多个责任对他由不同方向的拉扯,比如子类的不同方向的实现变化的方向隐含着类的责任 里式替换原则 子类必须能够替换他们的基类继承表达类型抽象 接口隔离原则 不应该强迫客户端依赖他们不用的方法也就是说接口应该小而完备,。一个接口只服务于一个子模块或业务逻辑。 合成复用原则 要求在软件复用时,要尽量先使用对象组合(成员变量,不来不行)或者聚合(局部变量或者函数形参,不来只有这个函数不好使)来实现,其次才考虑使用继承关系来实现。对象组合通常为“黑箱复用(B复用A的技能,但是无法看到A的内部细节)”,类继承通常为“白箱复用(父类的实现细节暴露给子类,父类对子类是透明的)”继承在某种程度上破坏了封装性,子类和父类耦合度高,而对象组合则是只要求被组合的对象具有良好定义的接口,相对耦合度低。在灵活性方面,从父类继承而来的实现是静态的,在编译时已经定义,所以在运行时不可能发生变化。而对象组合这种复用可以在运行时动态进行,新对象可以动态地引用与成分对象类型相同的对象。 迪米特法则(最少知识原则) 如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合度,提高模块的相对独立性。优点是降低了类之间的耦合度,提高了模块的相对独立性。由于亲合度降低,从而提高了类的可复用率和系统的扩展性。缺点是过度使用迪米特法则会使系统产生大量的中介类,从而增加系统的复杂性,使模块之间的通信效率降低。所以,在釆用迪米特法则时需要反复权衡,确保高内聚和低耦合的同时,保证系统的结构清晰。它强调两点:从依赖者的角度来说,只依赖应该依赖的对象。从被依赖者的角度说,只暴露应该暴露的方法。

    由七大原则可知要注意

    在类的划分上,应该创建弱耦合的类。类与类之间的耦合越弱,就越有利于实现可复用的目标。在类的结构设计上,尽量降低类成员的访问权限。在类的设计上,优先考虑将一个类设置成不变类。在对其他类的引用上,将引用其他对象的次数降到最低。不暴露类的属性成员,而应该提供相应的访问器(set 和 get 方法)。针对接口编程而不是针对实现编程,也就是接口标准化,核心就是分工协做,不讲变量类型声明为某个类而是声明为某个接口这 7 种设计原则是软件设计模式必须尽量遵循的原则,各种原则要求的侧重点不同。其中, 开闭原则是总纲,它告诉我们要对扩展开放,对修改关闭;里氏替换原则告诉我们不要破坏继承体系;依赖倒置原则告诉我们要面向接口编程;单一职责原则告诉我们实现类要职责单一;接口隔离原则告诉我们在设计接口的时候要精简单一;迪米特法则告诉我们要降低耦合度;合成复用原则告诉我们要优先使用组合或者聚合关系复用,少用继承关系复用。
    Processed: 0.016, SQL: 8