写点什么

【愚公系列】2022 年 06 月 通用职责分配原则 (六)- 多态原则

作者:愚公搬代码
  • 2022 年 6 月 18 日
  • 本文字数:1307 字

    阅读完需:约 4 分钟

前言

GRASP:General Responsibility Assignment Software Patterns 通用职责分配软件模式。


首先我们先来区分下 GRASP 与 GOF 模式的区别,它们主要在什么时候用,用来做什么。在软件开发过程中,我们常说面向对象开发,面向对象思想应该贯穿整个软件开发生命周期。我们在将现实世界中的业务对象及业务功能抽象成软件系统中的系统对象过程中应该遵循使用 GRASP 模式。而在具体技术实现上应该遵循使用 GOF 设计模式,来实现系统功能。即 GRASP 主要使用在分析设计阶段,与具体技术无关;而 GOF 模式主要使用在开发阶段,与具体技术相关,它是对 GRASP 设计成果进行实现时而使用,是一种开发阶段的设计模式。


GRASP 软件设计模式包括 9 个模式:创建者、信息专家、低耦合、控制器、高内聚、多态性、纯虚构、间接性、防止变异。


<hr style=" border:solid; width:100px; height:1px;" color=#000000 size=1">


<font color=#999AAA >提示:以下是本篇文章正文内容,下面案例可供参考

一、多态原则(Polymorphism Principle)

(1)问题


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


(2)方案


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


(3)分析


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

二、使用步骤

示例

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#设计模式 系列博文中结构型模式下的组合模式中找到。

发布于: 刚刚阅读数: 4
用户头像

还未添加个人签名 2022.03.01 加入

该博客包括:.NET、Java、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、python、大数据等相关使用及进阶知识。查看博客过程中,如有任何问题,皆可随时沟通。

评论

发布
暂无评论
【愚公系列】2022年06月 通用职责分配原则(六)-多态原则_6月月更_愚公搬代码_InfoQ写作社区