多态原则(Polymorphism Principle)

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/379 访问。


(1)问题

1、如何处理基于类型的不同选择?
2、如何创建可嵌入的软件组件?

(2)方案

当相关选择或行为随类型(类)变化而变化时,用多态操作为行为变化的类型分配职责。

(3)分析

由条件变化引发同一类型的不同行为是程序的一个基本主题。如果用if-else或switch-case等条件语句来设计程序,当系统发生变化时必须修改程序的业务逻辑,这将导致很难方便地扩展有新变化的程序。另外对于服务器/客户端结构中的可视化组件,有时候需要在不影响客户端的前提下,将服务器的一个组件替换成另一个组件。此时可以使用多态来实现,将不同的行为指定给不同的子类,多态是设计系统如何处理相似变化的基本方法,基于多态分配职责的设计可以方便地处理新的变化。在使用多态模式进行设计时,如果需要对父类的行为进行修改,可以通过其子类来实现,不同子类可以提供不同的实现方式,将具体的职责分配给指定的子类。新的子类增加到系统中也不会对其他类有任何影响,多态是面向对象的三大基本特性之一(另外两个分别是封装和继承),通过引入多态,子类对象可以覆盖父类对象的行为,更好地适应变化,使变化点能够“经得起未来验证”。多态模式在多个GoF设计模式中都有所体现,如适配器模式、命令模式、组合模式、观察者模式、策略模式等。


示例:

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/379 访问。

public class Folder : FileSystem {private List<FileSystem> _childrens = null;public Folder(string name) : base(name) {_childrens = new List<FileSystem>();}public override FileSystem Attach(FileSystem component) {_childrens.Add(component);return this;}public override FileSystem Detach(FileSystem component) {_childrens.Remove(component);return this;}public override void Print(int depth = 0) {Console.WriteLine(new string(SPLIT_CHAR_DIR, depth) + _name);foreach (var component in _childrens) {component.Print(depth + 1);}}}

以上代码可在我的 C#设计模式 系列博文中结构型模式下的组合模式中找到。

通用职责分配软件原则之6-多态原则相关推荐

  1. 通用职责分配软件原则之4-高内聚原则

    高内聚原则(High Cohesion Principle) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/375 访问 ...

  2. 通用职责分配软件原则之7-纯虚构原则

    纯虚构原则(Pure Fabrication Principle) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/381 ...

  3. 通用职责分配软件原则之2-创造者原则

    创造者原则(Creator Principle) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/371 访问. (1)问 ...

  4. 通用职责分配软件原则之1-信息专家原则

    信息专家原则(Information Expert Principle) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/ ...

  5. 通用职责分配软件原则之5-控制器原则

    控制器原则(Controller Principle) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/377 访问. ( ...

  6. 通用职责分配软件原则之3-低耦合原则

    低耦合原则(Low Coupling Principle) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/373 访问. ...

  7. GRASP通用职责分配软件模式

    1.  概述 它的核心思想是"职责分配(Responsibility Assignment)".GRASP提出了几个基本原则,用来解决面向对象设计的一些问题. Craig Larm ...

  8. 通用职责分配软件原则之9-受保护变量原则

    受保护变量原则(Protected Variations Principle) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archiv ...

  9. 通用职责分配软件原则之8-中介原则

    中介原则(Indirection Principle) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/383 访问. ( ...

最新文章

  1. 利用OpenCV+ConvNets检测几何图形
  2. python中常用的序列化模块_Python常用模块之pickle——对象序列化
  3. iOS ffmpeg 之编译ffmpeg
  4. SET QUERY_GOVERNOR_COST_LIMIT
  5. 14、java中的集合(1)
  6. php如何制定跳转到app原生页面,js实现界面向原生界面发消息并跳转功能
  7. 神经网络加载数据 自建数据集 官方数据集 pytorch 显示数据集
  8. reactJS -- 13 JSX样式与CSS的互转
  9. 【Cisco NA】单臂路由+DHCP+DHCP中继+GRE Tunnel
  10. 金店管理系统的几个经验和教训
  11. Xcode中查看宏在预处理阶段的展开
  12. Excel将选中的筛选内容复制可见的筛选格中方法
  13. 调查问卷或量表的选项方向或顺序该如何设置??
  14. 单片机音乐盒c语言程序代码,基于单片机的八音盒电路原理图和完整程序源代码.doc...
  15. 行人重识别论文阅读10-DDAG 动态双注意聚合学习策略
  16. Flink快速回忆之Operators(运算符)
  17. 100天python、github_GitHub - 100440175/Python-100-Days: Python - 100天从新手到大师
  18. cisco路由器交换机忘记密码后的恢复
  19. python安装失败未指定_win7 64 位安装 python,提示: 0x80240017-未指定的错误
  20. IOS13图标尺寸_7大原则,带你设计出更优秀的图标

热门文章

  1. 如何用Pygame写游戏(十六)
  2. Kubernetes-卷/存储卷(emptyDir/hostPath/pv/pvc)(十)
  3. 给定数组,去掉0元素后将剩下的元素赋给新的数组
  4. 输出语句 WriteLine 与格式化输出 1006 c#
  5. 分支语句语法格式小结 java
  6. PostgreSQL备份还原
  7. 利用VBA导出幻灯片为图片
  8. 能让你开发效率翻倍的 sublime 插件配置
  9. WCF技术剖析之十七:消息(Message)详解(上篇)
  10. 金额数字转中文大写(转)