软件架构设计原则之里氏替换原则

在面向对象编程中,六大设计原则,旨在使软件设计更易于理解、灵活和可维护。这些经验是前人,踩过无数次坑总结出来的实践经验。

六大设计原则如下:

· 单一职责原则

· 开闭原则

· 里氏替换原则

· 接口隔离原则

· 依赖反转原则

· 迪米特原则

本文我们来介绍里氏替换原则。

里氏替换原则

里氏替换原则反映了基类与子类之间的关系,是对开闭原则的补充,是对实现抽象化的规范。

里氏替换的强调的是子类可以替换超类,子类可以扩展父类的功能,但不能改变父类原有的功能。


关键要素:

1、衍生类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。

2、子类中可以增加自己独有的方法。

3、当子类重载父类的方法时,子类方法的输入参数要比父类方法的输入参数更宽松。

4、当子类实现父类的方法时,子类方法的逻辑是具体实现的。比如抛出异常时,衍生类要抛出更具体的异常。

代码示例

以缓存为例,我们要做缓存数据,缓存有redis、MemoryCache
abstract class Cache

{

public abstract void SetValue(string key, string value);

public abstract void GetValue(string key);

}

class Redis : Cache

{

public override void SetValue(string key, string value)

{

Console.WriteLine("Redis写缓存");

//todo

}

public override void GetValue(string key)

{

//todo

Console.WriteLine("Redis取缓存");

}

public void SetRedisTime()

{

Console.WriteLine("Redis设置过期时间");

}

}

class MemoryCache : Cache

{

public override void SetValue(string key, string value)

{

//todo

Console.WriteLine("MemoryCache写缓存");

}

public override void GetValue(string key)

{

//todo

Console.WriteLine("MemoryCache读缓存");

}

public void SetMemoryCacheTime()

{

Console.WriteLine("MemoryCache设置过期时间");

}

}

调用演示如下图所示:

软件架构设计原则之里氏替换原则


总结

里氏替换是子类替换超类,在面向对象编程中,更多是抽象类和接口作为超类。里氏替换只是一种原则,我们在开发中应该随机应变,以为上述代码为例,需要设置不同缓存类型的过期时间, 就没有必要建立一个过期时间的超类,完全可以在每个缓存子类定义过期时间即可。

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章