类层次设计时的灵活处理

概述

多态设计时候的一些小技巧,通过加入一层抽象类,减少后续的改动,如在抽象基类或者接口中加入新的method,此时并不需要在所有的实现类中去实现,只需要在需要实现的类中去实现处理,在抽象类中提供默认的实现,当然出现此种情况接口可能设计的时候存在一定的不合理,但是在实际的情况确实会出现不合理。

看下面的例子:

public interface IFile
    {
        bool Open();
    }
public abstract class AbstractFile : IFile
    {
        public abstract bool Open();
}
public class ImageFile : AbstractFile
    {
        public override bool Open()
        {
            return DoOpenImageFile();
        }

        private bool DoOpenImageFile()
        {
            throw new NotImplementedException();
        }
}
public class DocFile : AbstractFile
    {
        public override bool Open()
        {
            return DoOpenDocFile();
        }

        private bool DoOpenDocFile()
        {
            throw new NotImplementedException();
        }
    }

此时如果需要在IFile中加入新的method:bool TextFileBackup ();如果没有加入AbstractFile 层,则需要在所有的实现类中去实现该方法,而实际就DocFile 或者后面新加入的文本处理相关的File类需要实际处理该方法,ImageFile就直接返回。当然这里可以通过改进设计,将TextFileBackup方法从IFile中移走,但是实际情况有可能其他地方就是依赖IFile来调用TextFileBackup方法,这就造成改动会影响较大。

通过在AbstractFile中实现虚方法来加入一个默认的实现,在子类中就可以选择性的实现TextFileBackup了。

看下面的示例:

public abstract class AbstractFile : IFile
    {
        public abstract bool Open();

        public virtual bool TextFileBackup()
        {
            return false;
        }
}

只在DocFile中覆写

public class DocFile : AbstractFile
    {
        public override bool Open()
        {
            return DoOpenDocFile();
        }

        private bool DoOpenDocFile()
        {
            throw new NotImplementedException();
        }

        public override bool TextFileBackup()
        {
            return DoTextFileBackup();
        }

        private bool DoTextFileBackup()
        {
            throw new NotImplementedException();
        }
    }

总结

可能存在不合理,但是在设计时候加入抽象类层次,可以增加一定的灵活性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值