设计模式基本原则

Posted zhengyazhao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式基本原则相关的知识,希望对你有一定的参考价值。

1.单一职责

??对于一个类而言,应该只有一个引起它变化的原因。

??对于一个类来说,只做这个类本身需要做的事情,例如有用户、角色和功能类,如果把这些类都放到一个接口当中,那么显然这个类不符合单一职责,主要有以下问题:

  • 用户、角色的修改都在一个模块当中,这样的设计是不合理的,首先用户的属性和行为是两种不同的业务。

??应当把不同的业务,拆分成独立的两个类。

适用于方法

?? 往往我们对用户信息修改的时候,通常会提供一个方法,这个方法参数为一个用户的实体对象,用户在进行修改信息的时候,全都调用这个方法修改。

其实这种方法不可取,这样会导致这个方法的职责不明确,到底是修改用户密码,还是手机,还是其他信息?

单一职责优点

  • 类的复杂度降低、每个类的职责都有明确的定义
  • 可读性高
  • 复用性高
  • 变更引起的风险低
  • 可维护性高
  • 提高代码的扩展性

2.开放封闭原则

??软件实体、对扩展开放、对修改封闭。面对需求,对程序的改动是增加新代码完成,而不是修改现有代码,例如策略模式(摘自大话设计模式),如果在有一种打折、积分只需要添加对应的子类就可以完成扩展,而不是修改现有代码!

技术图片

开放封闭优点

??通过扩展已有软件系统,可以提供新的行为,用来满足对软件的新的需求,使变化中的软件有一定的适应性和灵活性。

??已有软件模块,特别是最重要的抽象层模块不能在修改,保证我们的系统具有一定的稳定性和延续性。

3.里氏代换原则

??子类必须能够替换他们的父类。(协变)

技术图片

优点

??增强程序健壮性,增加子类不会影响原来的子类。

4.依赖倒置原则

??要依赖于抽象,不应该依赖于具体的某个类,应当面向接口编程,而不是面向实现。

原始译文

1.高层模块不应该依赖低层模块,两者都应该依赖其抽象

2.抽象不应该依赖细节

3.细节应该依赖抽象。

反面例子:

public void User()
{
    Role role=new Role();
}
public class Role
{
    public void Add()
    {
        ...
    }
}

缺点:耦合太密切,Role发生变化将会影响User类

优点

  • 降低类与类之间的耦合。
  • 插拔式设计提高代码的可扩展性
  • 代码层次更加清晰

迪米特法则

??最少知识法则,一个对象应当对其他对象有尽可能少的了解。减少类与类之间的耦合。

接口隔离

??客户端不应该依赖它不需要的接口,一个类对另一个类的依赖应该建立在最小的接口上。

反例:

 public class user:Iuser
 {
     public void AddUser()
     {}
     public void AddRole()
     {}
 }
 public interface IUser
 {
     
     void AddUser();
     void AddRole();
 }

缺点:用户类只需要添加user相关的行为,不需要角色的行为,这种方式是不符合迪米特法则,应该user、role都建立独立的接口

以上是关于设计模式基本原则的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp Robolution基本代码片段

html PHP代码片段: - AJAX基本示例:此代码演示了使用PHP和JavaScript实现的基本AJAX功能。

6大设计原则之开闭原则

用于从 cloudkit 检索单列的代码模式/片段

发生配置更改时如何不重置我的片段?

是否有在单个活动中处理多个片段的 Android 设计模式?