虚模式

问题场景

子类从抽象派生是为了解耦,但为了适应新的变化,可能需要向抽象类添加新功能,假如在添加新功能之前已经有100个子类实现了抽象,那么接下来你得在100个子类中去重写向抽象添加的新功能。

总结模式

可以使用virtual修饰符来定义新功能,virtual并不强制要求子类去实现,所以新增功能可以以这种方式定义在抽象类中并提供一个默认的实现。

示例代码

//遥控器抽象
public abstract class Remote
{
    public abstract void TurnOn( );
    //新功能
    public virtual void SearchChannels( )
    {
        Console.WriteLine( "正在搜索频道" );
    }
}

//我可以不重写新增功能,用默认的实现就好了
public class PanasonicRemote : Remote
{
    public override void TurnOn( )
    {
        Console.WriteLine( "正在关闭松下电视" );
    }
}

//我得重写新功能,以便符合我的要求
public class PandaRemote : Remote
{
    public override void TurnOn( )
    {
        Console.WriteLine( "正在关闭熊猫电视" );
    }

public override void SearchChannels( )
    {
        Console.WriteLine( "正在搜索熊猫牌电视内置的频道" );
    }
}

C# - 设计模式目录

最新文章

  1. 初识MVC
  2. .NET entityframework for mysql ,datetime字段存储值时有误差
  3. SQL级联删除——删除主表同时删除从表——同时删除具有主外键关系的表
  4. graphviz - Node Shapes
  5. 农村的“无为教育” (FW)
  6. iTween基础之Punch(摇晃)
  7. Markdown 测试
  8. VritualBox 中Debian安装tool
  9. 使用Spring JDBCTemplate简化JDBC的操作
  10. Binding 之ObjectDataProvider数据源
  11. MyEclipse调整项目的顺序
  12. 利用whoosh对mongoDB的中文文档建立全文检索
  13. 二维码js生成库
  14. Java实现将任何编码方式的txt文件以UTF-8编码方式转存
  15. Bugku-CTF之never give up
  16. 多线程之interrupt
  17. 【PAT】B1074 宇宙无敌加法器(20 分)
  18. Mac下软件包管理器-homebrew
  19. 牛客网数据库SQL实战(6-10)
  20. java重定向与请求转发的区别

热门文章

  1. 类Object
  2. 【算法】C语言趣味程序设计编程百例精解
  3. LeetCode21—合并两个有序链表
  4. qsort.c源码
  5. 搭建Eureka注册中心
  6. Vs2015 当前不会命中断点,没有与此关联的可执行代码
  7. 实习初步认识_1:部署renren-fast v2.0遇到的问题及解决方案
  8. 《深入理解java虚拟机》学习笔记-----郑雨迪
  9. bzoj3168 钙铁锌硒维生素 (矩阵求逆+二分图最小字典序匹配)
  10. 数据库MySQL——安装