标签:10 钩子 System 模式 子类 println 方法 模板 out
package templateMethod; /** * 模板方法: 定义一个操作中的算法的骨架,而将步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义算法的某些特定步骤。 * 我的理解就是好多东西都定义到父类(但是不做具体的实现 而是抽象或者实现类中简单实现) 子类中根据需求进行具体的实现 * * 优点: ☆ 模板方法模式通过把不变的行为搬移到超类,去除了子类中的重复代码。 * ☆ 子类实现算法的某些细节,有助于算法的扩展。 * ☆ 通过一个父类调用子类实现的操作,通过子类扩展增加新的行为,符合“开放-封闭原则”。 * 缺点: * △ 每个不同的实现都需要定义一个子类,这会导致类的个数的增加,设计更加抽象。 * 适用场景: * □ 在某些类的算法中,用了相同的方法,造成代码的重复。 * □ 控制子类扩展,子类必须遵守算法规则。 * * 模板方法模式的结构: 抽象方法:父类中只声明但不加以实现,而是定义好规范,然后由它的子类去实现 * * 模版方法:由抽象类声明并加以实现。一般来说,模版方法调用抽象方法来完成主要的逻辑功能, * 并且,模版方法大多会定义为final类型,指明主要的逻辑功能在子类中不能被重写。 * * 钩子方法:由抽象类声明并加以实现。但是子类可以去扩展,子类可以通过扩展钩子方法来影响模版方法的逻辑。 * 抽象类的任务是--》搭建逻辑的框架,通常由经验丰富的人员编写,因为抽象类的好坏直接决定了程序是否稳定性 * * * @author LiMing E-mail:1151143484@qq.com * @date 2017年6月14日 下午3:09:13 */ public class TemplateMethod { public static void main(String[] args) { Son son = new Son(); son.templateMethod(); } } abstract class Father { /* * 抽象方法 */ abstract void abstractMethod(); /* * 模版方法 */ final void templateMethod(){ System.out.println("本方法不能被子类重写!!!!"); System.out.println("------调用钩子方法hookMethod开始"); hookMethod(); System.out.println("------调用钩子方法hookMethod结束"); System.out.println("------调用抽象方法开始"); abstractMethod(); System.out.println("------调用抽象方法结束"); //返回布尔类型的钩子方法 if(isPermit()){ System.out.println("isPermit这类方法就是用来控制逻辑的 子类如果不想走这条分支 完全可以覆盖isPermit 返回false 像svn设置权限的钩子文件可能用的就是这个模式"); } } /* * 钩子方法 子类实现 */ public void hookMethod() { System.out.println("父类钩子方法的实现"); } /* * 钩子方法 2 * 这类钩子方法很实用 * 用于对某个条件进行判断,如果条件满足则执行某一步骤 看我在templateMethod中怎么使用 */ public boolean isPermit() { return true; } } class Son extends Father{ /* * 钩子方法 子类实现 */ public void hookMethod() { System.out.println("子类钩子方法的实现"); } /* * 实现抽象方法 */ void abstractMethod() { System.out.println("子类实现抽象方法"); } /* * 如果不想执行if(isPermit) 这个分支 可以覆盖这个方法 返回false */ public boolean isPermit() { return false; } }
标签:10,钩子,System,模式,子类,println,方法,模板,out 来源: https://blog.51cto.com/u_12198094/2700004
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。