妓女也玩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的好处了吧。

浙公网安备 33010602011771号