装饰者模式

成功输出

稍微改进,使得每个校验只用关注实现的方法,而不用关注如何调用

public abstract class Info
{
    protected string 校验文本 { get; set; } = "ABCDET";

    public string 校验信息 { get; set; } = "";

    public abstract void 校验方法();

    public abstract void 校验();
  
}

public abstract class InfoCondition :Info
{
    public override abstract void 校验方法();

}

public class 校验是否ABC开头 :Info
{

    public override void 校验方法()
    {
        this.校验信息 += "校验开始:";
    }
    public void Set校验文本(string value)
    {
        this.校验文本=value;
    }

    public override void 校验()
    {
        this.校验方法();
    }     
}

public class 校验管道(Info info) : InfoCondition
{

    public override void 校验方法()
    {
        throw new Exception();
    }
    public override void 校验()
    {
        info.校验();
        this.校验方法();
        this.校验信息 = info.校验信息 + this.校验信息;
    }
}


public class 校验A开头(Info info) : 校验管道(info)
{

    public override void 校验方法()
    {         
        if (this.校验文本.Contains("A"))
        {
            this.校验信息 += "存在A,";
        }
        else
        {
            this.校验信息 += "不存在A,";
        }          
    } 
}
public class 校验B开头(Info info) : 校验管道(info)
{
    public override void 校验方法()
    {
        if (this.校验文本.Contains("B"))
        {
            this.校验信息 += "存在B,";
        }
        else
        {
            this.校验信息 += "不存在B,";
        }         
    }
}
public class 校验C开头(Info info) : 校验管道(info)
{ 
    public override void 校验方法()
    {            
        if (this.校验文本.Contains("C"))
        {
            this.校验信息 += "存在C,";
        }
        else
        {
            this.校验信息 += "不存在C,";
        }          
    }
}

另外,简单的实现了一下工厂模式(弃元初应当有错误提醒,这里图不是重点就图省事了)

Info info = new 校验是否ABC开头( )
{
};
var 校验选项 = new List<string>()
{
    "A","C",
};

var factory = (string name, Info info) =>
{
    return name switch
    {
        "A" => info = new 校验A开头(info),
        "B" => info = new 校验B开头(info),
        "C" => info = new 校验C开头(info),
        _ => info = new 校验A开头(info)
    };
};

foreach (var f in 校验选项)
{
    info = factory(f, info);
}




//info=new 校验A开头(info);
//info=new 校验B开头(info);
//info=new 校验C开头(info);
info.校验();
Console.WriteLine(info.校验信息);

简单的工厂校验模式就完成了,配合反射什么的应该会更灵活

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值