1。分清楚:通用点(要封装起来可重用)、扩展点(变化点)

2。有白盒框架、黑盒框架、灰盒框架。

作用都是要把扩展点插入通用点中。

~白盒框架:主要用继承法:钩子方法、模版方法

钩子方法:
定义:
public abstract class BasicBusiness
{
protected  float income;
public void ReportTax()
{
   float sTax=CalculateStateTax();
   float fTax=CalculateStateTax();
bool ok=checkBankBalance(sTax+fTax);
if (!ok)
{
FlieBankruptcy();
}
esle
{
SendMoneyToGov(sTax+fTax);
}
}
protected abstract  float CalculateStateTax();
protected abstract float CalculateFedTax();
}
//定义了通用点



public class NewYorkBusiness:BasicBusiness
{
protected override float CalculateStateTax()
{
return  income*0.1F;
}
protected override float CalculateFedTax()
{
return income*0.2F;
}
}
//定义了扩展点


BasicBusiness nyBusiness=new NewYorkBusiness();
nyBusiness.ReportTax();

BasicBusiness caBusiness=new CaliforniaBusiness();
caBusiness.ReportTax();

其中ReporTax()就是模板。


public abstract class BasicBusiness
{
protected  float income;
public void ReportTax()
{
   float sTax=CalculateStateTax();
   float fTax=CalculateStateTax();
bool ok=checkBankBalance(sTax+fTax);
if (!ok)
{
FlieBankruptcy();
}
esle
{
SendMoneyToGov(sTax+fTax);
}
}
protected abstract  float CalculateStateTax();
protected abstract float CalculateFedTax();
}


public interface ICalculateTax
{
 float CalculateStateTax();
 float CalculateFedTax();
 float  Income
{
get ;set;
}
}

//多加了这个接口,就不可以知道通用类里面的数据和参数了。。。

public class NewYorkBusiness:ICalculateTax
{
private float income;
public float Income
{
get{ return income;}
set{ income=value;}
}
public float CalculateStateTax()
{
return income*0.1F;
}
public float CalcuateFedTax()
{
return income*0.2F;
}
}



~组合法


public class BasicBusiness
{
public void ReporTax(ICalculateTax calculator)
{
float sTax=calculator.CalculateStateTax();
float fTax=calculator.CalculateFedTax();
bool ok=CheckBalance(sTax+fTax);
if (!ok)
{
FileBankruptcy();
}
else
{
SendMoneyToGov(sTax+fTax);
}
}
}


ICalculateTax nyBusiness=new NewYorkBusiness();
ICalculateTax caBusiness=new CaliforniaBusiness();

BasicBusiness basic=new BasicBusiness();
basic.ReportTax(nyBusiness);
basic.ReportTax(caBusiness);

posted on 2007-03-11 22:57  anerkor  阅读(192)  评论(0编辑  收藏  举报