程序设计中应该注意的——六大设计原则

程序设计中应该注意的——六大设计原则

  1. 开闭原则
    1. 定义:一个软件实体,如类,模块函数对外扩展应该开放,对内修改应该关闭
    2. 解释:在程序设计过程中应该用抽象构建框架,通过实现类来扩展细节,在不改动原有功能的情况下实现新需求,通过接口来定义规则,在不改变原有代码的前提下给程序扩展功能,降低程序的维护成本。
    3. 扩展&软件变化的三种类型:
      1. 逻辑变化:通过修改原有类中的方法实现;
      2. 子模块变化:一个模块的变化会对其他模块产生影响;
      3. 可见视图变化 :给客户使用的界面,如jsp,swing界面,该部分的变化一般会引起连锁反应。
  2. 单一职责原则
    1. 定义:一个类只允许有一个职责,一个类如果有多种职责,就会有多种导致这个类变化的原因,从而导致类的维护变得困难。
    2. 解释:如果我们发现当前类的职责不仅仅有一个,就应该将本来不属于该类真正的职责分离出去。
    3. 优点:
      1. 类和方法的职责划分很清晰,类的复杂度降低;
      2. 不但可以提高代码的可读性,也降低了程序出错的成本,有利于bug的追踪;
      3. 可维护性提高,可读性提高;
      4. 变更引起的风险降低,变更也必不可少,如果接口单一职责做好,一个接口修改只对相应的实现类有影响,对其他的接口无影响,这对系统的扩展性,维护性都有非常大的帮助。
    4. 注意:接口的设计一定要做到单一职责,类要尽量做到只有一个原因引起变化,用职责或变化原因来衡量一个类设计的是否优良。
  3. 依赖倒置原则
    1. 定义:模块间的依赖通过抽象发生,实现类之间不发生直接依赖关系,其依赖关系是通过接口或抽象类产生的。
    2. 解释:针对抽象的接口编程,而不依赖实现编程,不要从具体的类派生,而是继承抽象类或实现接口来实现。高低层的划分依赖决策能力的高低进行划分,业务层就处于上层模块,逻辑层和数据层就归于底层。通过抽象来搭建框架,建立类和类的关联,以减少类之间的耦合性,以抽象搭建的系统要比具体实现搭建的系统更加稳定,扩展性更高,并易于维护。
    3. 特点:
      1. 高层接口模块不应该依赖底层接口模块,两者都应该依赖其抽象;
      2. 抽象不应该依赖实体方法;
      3. 细节应该依赖抽象。
    4. 依赖的三种写法:
      1. 构造函数传递依赖对象(构造函数注入);
      2. Setter方法传递依赖对象(setter依赖注入);
      3. 接口声明依赖对象(接口注入) 。
    5. 使用原则:
      1. 结合里氏替换原则使用。
      2. 尽量不要复写基类的方法;
      3. 任何类都不应该从具体类派生;
      4. 变量的表面类型尽量是接口或是抽象类;
      5. 每个类都尽量有接口或抽象类,或抽象类和接口都具备;
    6. 注意:依赖抽象而不是依赖实现,抽象不应该依赖细节,细节应该依赖抽象。高层模块不能依赖低层模块,二者应该依赖抽象。
  4. 接口分离原则
    1. 定义:指在设计时采用多个与特定客户类有关的接口比采用一个通用的接口要好。
    2. 解释:多特性客户端接口要好于一个通用性的总接口。
    3. 接口的类型:
      1. 类接口:使用interface关键字定义的接口;
      2. 实例接口:java类也是一种接口;
    4. 注意:
      1. 建立接口时尽量要将接口细化,不要建立臃肿庞大的接口,同时接口中的方法要尽量少;
      2. 客户端不应依赖它不需要实现的接口;
      3. 避免一个接口里面包含不同类职责的方法,接口责任划分明确,符合高内聚低耦合的思想。
  5. 迪米特法则
    1. 定义:迪米特法则叫做最少知道原则,一个类应该只和它的成员变量,方法输入,返回参数类作交流,而不应该引入其他的类。
    2. 解释:一个对象应该和尽可能少的对象接触,只接触那些真正需要接触的对象。
    3. 优点:可以良好地降低类与类之间的耦合,减少类之间的关联程度,让类与类之间的协助更加直接。
  6. 里式替换原则
    1. 定义:所有引用基类的地方必须能透明地使用其子类的对象,子类的对象可以替换其父类的对象,而程序执行效果不变。
    2. 解释(四层含义):
      1. 子类必须实现父类的全部方法
      2. 子类可以有自己的属性和方法;
      3. 覆写或实现父类的方法时输入参数可以被放大。如果出现父类参数类型大于子类参数类型,子类未必能覆盖父类的范围,因为一旦把子类作为参数传入,调用者很可能进入子类的方法范畴;
      4. 覆写或实现父类的方法时输出结果可以被缩小,子类的返回值类型必须小于等于父类的返回值类型。
    3. 注意:在程序设计过程中要约束继承在使用上的泛滥。继承原则中,子类可以增加自己特有的方法,可以实现父类的抽象方法,但是不能重写父类的非抽象方法,否则就不是一个正确的继承关系。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值