摸板模式与钩子
常常会在程序中遇到多个子类有共同的方法以及相似的调用过程。这个时候我们就可以使用模板模式来解决这些重复性的工作,例如我们买东西的时候一般都是挑选商品、付款这样的步骤,区别仅仅是挑选的商品品种不一样而已,这个时候我们就可以使用模板模式。那么模板模式需要怎么来实现呢,如下图
代码如下:
public class test
{
public static void main(String args[])
{
goods f=new fruit();
f.run();
goods d=new drink();
d.run();
}
}
class goods
{
void run()
{
getgoods();
pay();
}
void getgoods()
{
System.out.println("get");
}
void pay()
{
System.out.println("pay");
}
}
class fruit extends goods
{
void getgoods()
{
System.out.println("fruit");
}
}
class drink extends goods
{
void getgoods()
{
System.out.println("drink");
}
}
结果如图:
这样我们就可以避免在子类中涉及具体的算法,只需要将重复的内容已经算法提取到父类即可,降低了耦合。
至此,我们还可以加入一个钩子的机制,即可相应的对一些不需要的算法来进行控制。
代码如下
public class test
{
public static void main(String args[])
{
goods f=new fruit();
f.run();
goods d=new drink();
d.run();
}
}
class goods
{
void run()
{
if(hasGetGoods())
getgoods();
pay();
}
void getgoods()
{
System.out.println("get");
}
boolean hasGetGoods()
{
return false;
}
void pay()
{
System.out.println("pay");
}
}
class fruit extends goods
{
boolean hasGetGoods()
{
return true;
}
void getgoods()
{
System.out.println("fruit");
}
}
class drink extends goods
{
boolean hasGetGoods()
{
return false;
}
void getgoods()
{
System.out.println("drink");
}
}
结果:
联系我:renhanlinbsl@163.com
2016-8-3
21:25
联系我:renhanlinbsl@163.com
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下