妓女也玩OCP

1:OCP:Open-Closed Principle
 *      Open for Extension
 *      Close for modification
2:案情
 Callet妓女是拉客并接受性行为报酬的人,姑且我们把妓女的客人按照职位划分。妓女对不同身份的人要价都不一样

3:设计
我们一般的设计是这样的
class Callet
{
    Man man;
   
    public void GetMoney()
    {
        man.Pay();
    }
}
class Man
{
    public void Pay( )
    {}
}

可是现在Callet妓女又接了一个不同职位的客户【比如美国总统布什】,这时我们就的修改Man的pay方法。这就不符合OCP原则
我们需要对变化点【不同职位的嫖客】进行封装,而在OCP中封装的关键就是抽象【或者接口】。现在我们把各色各样的职位的人
抽象出一个抽象类IMan,抽象方法是付钱Pay

public abstract class IMan
{
    public abstract void Pay();
}
总统类President继承于IMan
public class PresidentMan : IMan
{
    public override void Pay()
    {
        System.Console.WriteLine(" 1234123.413¥");
    }
}
搞IT的也继承于IMan
public class ITMan : IMan
{
    public override void Pay()
    {
        System.Console.WriteLine(" 50.413¥");
    }
}


public class Callet
{
    IMan _iman;
    public Callet(IMan man)
    {
        this._iman = man;
    }
    public void GetMoney()
    {
        _iman.Pay();
    }
}


客户端程序
class App
{
    static void Main()
    {
        //妓女嫖客总统的价位
        IMan iman = new PresidentMan();
        Callet c = new Callet(iman);
        System.Console.Write("PRE:");
        c.GetMoney();
 //妓女嫖客it的价位
        iman = new ITMan();
        Callet c1 = new Callet(iman);
        System.Console.Write("IT:");
        c1.GetMoney();
        System.Console.ReadLine();
      

    }
}

 

4:总结
从上面的例子大家可以看出OCP的好处了吧。

你可能感兴趣的:(OCP)