在面向对象编程中,六大设计原则,旨在使软件设计更易于理解、灵活和可维护。这些经验是前人,踩过无数次坑总结出来的实践经验。
六大设计原则如下:
· 单一职责原则
· 开闭原则
· 里氏替换原则
· 接口隔离原则
· 依赖反转原则
· 迪米特原则
本文我们来介绍里氏替换原则。
里氏替换原则反映了基类与子类之间的关系,是对开闭原则的补充,是对实现抽象化的规范。
里氏替换的强调的是子类可以替换超类,子类可以扩展父类的功能,但不能改变父类原有的功能。
关键要素:
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 条评论) “” |