(精华)2020年8月30日 通用职责分配原则(六)-多态原则(Polymorphism Principle)
多态原则(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);
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
以上代码可在我的 C#设计模式 系列博文中结构型模式下的组合模式中找到。
文章来源: codeboy.blog.csdn.net,作者:愚公搬代码,版权归原作者所有,如需转载,请联系作者。
原文链接:codeboy.blog.csdn.net/article/details/108293791
- 点赞
- 收藏
- 关注作者
评论(0)