虚模式
问题场景
子类从抽象派生是为了解耦,但为了适应新的变化,可能需要向抽象类添加新功能,假如在添加新功能之前已经有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( "正在搜索熊猫牌电视内置的频道" );
}
}
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( "正在搜索熊猫牌电视内置的频道" );
}
}