设计模式-行为设计模式:模板方法设计模式 TemplateMethod
2016-12-13 15:18
691 查看
模板方法设计模式在有一套固定流程的时候可以用
优点:代码重用 方便扩展
缺点:解决不了代码爆炸问题
应用到新知识点:钩子方法
钩子方法:通过子类的一个重载方法可以控制父类的方法叫钩子方法
下面例子代码中,有一个展示存款数据父类,然后有 定期类、活期类、绝密类3种子类,其中因为大部分功能都一样,所以直接写在父类里面,并且通过一个抽象方法(计算利息)来实现不同类型存款按不同比例计算利息,并且通过一个virtual虚方法,来实现钩子方法(子类对父类的控制)
父类
public abstract class BaseDeposit
{
public void GetXx(string username,string pwd)
{
if (checkuser(username, pwd))
{
if (checkQx(username))
{
double total = GetTotal(username);
double interest = GetInterest(total);
show(username, total, interest);
}
else
{
Console.WriteLine("无权限查询");
}
}
else
{
Console.WriteLine("用户不存在");
}
}
//展示账户信息
public void show(string username, double total, double interest)
{
Console.WriteLine("账号名:{0},账户余额{1}元,将获得利息{2}元",username,total,interest);
}
//计算利息
public abstract double GetInterest(double total);
//获得账户余额
public double GetTotal(string username)
{
return 50000;
}
//检查是否有权限查询账户信息的虚方法
public virtual bool checkQx(string username)
{
return true;
}
// 检查用户名密码
public bool checkuser(string username, string pwd)
{
return username == "张三" && pwd == "123456";
}
}
定期类:
public class DingQi:BaseDeposit
{
public override double GetInterest(double total)
{
return total * 0.002;
}
}
活期类:
public class HuoQi:BaseDeposit
{
public override double GetInterest(double total)
{
return total * 0.001;
}
}
绝密类:(此类中 重写了 虚方法 实现了钩子方法对父类的控制)
public class JueMi:BaseDeposit
{
public override double GetInterest(double total)
{
return total * 1;//计算也没用 不展示
}
public override bool checkQx(string username)
{
return false;
}
}
调用
Console.WriteLine("*****************下面展示的是定期账户*******************");
BaseDeposit dingqi = new DingQi();
dingqi.GetXx("张三","123456");
Console.WriteLine("*****************下面展示的是活期账户*******************");
BaseDeposit huoqi = new HuoQi();
huoqi.GetXx("张三", "123456");
Console.WriteLine("*****************下面展示的是绝密账户*******************");
BaseDeposit juemi = new JueMi();
juemi.GetXx("张三", "123456");
结果
优点:代码重用 方便扩展
缺点:解决不了代码爆炸问题
应用到新知识点:钩子方法
钩子方法:通过子类的一个重载方法可以控制父类的方法叫钩子方法
下面例子代码中,有一个展示存款数据父类,然后有 定期类、活期类、绝密类3种子类,其中因为大部分功能都一样,所以直接写在父类里面,并且通过一个抽象方法(计算利息)来实现不同类型存款按不同比例计算利息,并且通过一个virtual虚方法,来实现钩子方法(子类对父类的控制)
父类
public abstract class BaseDeposit
{
public void GetXx(string username,string pwd)
{
if (checkuser(username, pwd))
{
if (checkQx(username))
{
double total = GetTotal(username);
double interest = GetInterest(total);
show(username, total, interest);
}
else
{
Console.WriteLine("无权限查询");
}
}
else
{
Console.WriteLine("用户不存在");
}
}
//展示账户信息
public void show(string username, double total, double interest)
{
Console.WriteLine("账号名:{0},账户余额{1}元,将获得利息{2}元",username,total,interest);
}
//计算利息
public abstract double GetInterest(double total);
//获得账户余额
public double GetTotal(string username)
{
return 50000;
}
//检查是否有权限查询账户信息的虚方法
public virtual bool checkQx(string username)
{
return true;
}
// 检查用户名密码
public bool checkuser(string username, string pwd)
{
return username == "张三" && pwd == "123456";
}
}
定期类:
public class DingQi:BaseDeposit
{
public override double GetInterest(double total)
{
return total * 0.002;
}
}
活期类:
public class HuoQi:BaseDeposit
{
public override double GetInterest(double total)
{
return total * 0.001;
}
}
绝密类:(此类中 重写了 虚方法 实现了钩子方法对父类的控制)
public class JueMi:BaseDeposit
{
public override double GetInterest(double total)
{
return total * 1;//计算也没用 不展示
}
public override bool checkQx(string username)
{
return false;
}
}
调用
Console.WriteLine("*****************下面展示的是定期账户*******************");
BaseDeposit dingqi = new DingQi();
dingqi.GetXx("张三","123456");
Console.WriteLine("*****************下面展示的是活期账户*******************");
BaseDeposit huoqi = new HuoQi();
huoqi.GetXx("张三", "123456");
Console.WriteLine("*****************下面展示的是绝密账户*******************");
BaseDeposit juemi = new JueMi();
juemi.GetXx("张三", "123456");
结果
相关文章推荐
- 设计模式之模板方法模式---template method
- c++设计模式----模板方法template method
- 二十四种设计模式:模板方法模式(Template Method Pattern)
- 设计模式 -- 模板方法模式 TemplateMethod
- 设计模式之22 - 模板方法Template method
- Java设计模式 Design Pattern:模板方法 Template Method
- 您的设计模式——模板方法模式【Template Method Pattern】
- Java设计模式(16)——行为模式之模板方法模式(Template)
- 设计模式之模板方法Template Method
- 设计模式19:Template Method Pattern (模板方法模式)
- 设计模式 - Template Method Pattern(模板方法模式)
- 乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
- java设计模式之模板方法模式Template method
- java23中设计模式——行为模式——Template(模板方法)
- 设计模式浅析之--模板方法模式Template Method
- Java设计模式 Design Pattern:模板方法 Template Method
- 设计模式之模板方法模式 templateMethod
- java_设计模式_模板方法模式_Template Method Pattern(2016-08-11)
- 如何让孩子爱上设计模式 ——24.模板方法模式(Template Method Pattern)
- 设计模式:模板方法模式-template method