襄阳市做网站,深圳网站建设怎样,seo做的比较牛的公司,有哪些做壁纸的网站好模板方法模式(Template Method)
模板方法模式将算法流程与算法具体实现相分离的结构.
首先, 定义一个抽象类, 抽象类中有一个不可重写的final方法, 这个方法中封装核心的算法流程, 但这个流程中只有方法调用, 没有具体实现.
具体的方法实现由子类完成, 一些方法是抽象方法, 子类…模板方法模式(Template Method)模板方法模式将算法流程与算法具体实现相分离的结构.首先, 定义一个抽象类, 抽象类中有一个不可重写的final方法, 这个方法中封装核心的算法流程, 但这个流程中只有方法调用, 没有具体实现.具体的方法实现由子类完成, 一些方法是抽象方法, 子类必须实现, 另一些方法则是钩子方法, 子类选择性实现.代码示例:// 模板方法类, 只定义核心逻辑, 提供算法框架, 不进行具体实现abstractclassHero{// 这个createHero方法中定义固定的逻辑, 所有子类都遵循这里的顺序// 有些方法子类必须实现, 也有部分钩子方法子类可选择性实现publicfinalvoidcreateHero(){try{System.out.print(身形: );createBody();System.out.print(肌肉: );if(createMuscles()){System.out.println( 身形健硕, 极其勇猛);}else{System.out.println(无);}System.out.print(武器: );if(createWeapon()){System.out.println( 真理面前, 众生平等);}else{System.out.println(没有武器);}System.out.print(技能: );createSkill();System.out.print(头戴: );createHat();System.out.print(名号: );sayName();}catch(Exceptione){System.out.println([Exception] e.getMessage());}}abstractvoidcreateHat();abstractvoidcreateSkill();abstractvoidcreateBody();// 钩子方法booleancreateMuscles(){returnfalse;}booleancreateWeapon(){returnfalse;}abstractvoidsayName();}classZhangFeiextendsHero{OverridevoidcreateHat(){System.out.println(黑帅盔);}OverridevoidcreateBody(){System.out.println(身高七尺,皮肤黝黑);}OverridevoidcreateSkill(){System.out.println(声如洪钟, 骁勇善战);}OverridevoidsayName(){System.out.println(燕人张飞张翼德);}OverridebooleancreateMuscles(){System.out.println(肌肉发达, 耐力非比寻常);returntrue;}OverridebooleancreateWeapon(){System.out.println(丈八蛇矛);returntrue;}}classLvBuextendsHero{OverridevoidcreateHat(){System.out.println(紫金冠);}OverridevoidcreateBody(){System.out.println(身高八尺,英俊无比);}OverridevoidcreateSkill(){System.out.println(辕门射戟神技, 战力非凡);}OverridevoidsayName(){System.out.println(九原吕布吕奉先);}OverridebooleancreateMuscles(){System.out.println(肌肉结实,身材魁梧);returntrue;}OverridebooleancreateWeapon(){System.out.println(方天画戟);returntrue;}}调用及执行:publicclassTemplateMethodPattern{publicstaticvoidmain(String[]args){ZhangFeizhangfeinewZhangFei();zhangfei.createHero();System.out.println();LvBulvbunewLvBu();lvbu.createHero();}}执行结果:身形: 身高七尺,皮肤黝黑 肌肉: 肌肉发达, 耐力非比寻常 身形健硕, 极其勇猛 武器: 丈八蛇矛 真理面前, 众生平等 技能: 声如洪钟, 骁勇善战 头戴: 黑帅盔 名号: 燕人张飞张翼德 身形: 身高八尺,英俊无比 肌肉: 肌肉结实,身材魁梧 身形健硕, 极其勇猛 武器: 方天画戟 真理面前, 众生平等 技能: 辕门射戟神技, 战力非凡 头戴: 紫金冠 名号: 九原吕布吕奉先模板方法能够让子类只实现算法的局部功能, 而不是去实现整个算法结构, 在实际开发中有效分离算法与实现.在思考一个算法时, 考虑有哪些共同的步骤是在各种情况中反复出现的, 把他们都分步抽出来,然后各种情况的实现类去实现这些有差异的部分