`

设计模式(15)- 模板方法模式

阅读更多

模板方法模式

1.定义

        定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。

2.示例代码

        用来实现普通登陆和工作人员登陆的示例代码

  

/*封装进行登陆控制所需要的数据*/
public class LoginModel{
   private String loginId;
   private String pwd;
   public String getLoginId(){
       return loginId;
   }
   public void setLoginId(String loginId){
       this.loginId = loginId;
   }
   public String getPwd(){
       return pwd;
   }
   public void setPwd(String pwd){
       this.pwd = pwd;
   }
}

/*定义公共登陆控制算法骨架*/
public abstract class LoginTemplate{
   //判断是否登陆
   public final boolean login(LoginModel lm){
      //1.根据人员编号获取相应的数据
      LoginModel dbLm = this.findLoginUser(lm.getLoginId());
      if(dbLm != null){
          //2.对密码进行加密算法
          String encryptPwd = this.encryptPwd(lm.getPwd);
          //3.把加密后的密码设置回到登陆模型中
          lm.setPwd(encryptPwd);
          //4.判断是否匹配
          return this.match(lm,dbLm);
      }
   }
   //根据登陆编号获取相应信息
   public abstract LoginModel findLoginUser(String loginId);
   //对密码加密
   public String encryptPwd(String pwd){
      return pwd;
   }
   //判断是否能匹配
   public boolean match(LoginModel lm,LoginModel dbLm){
      if(lm.getLoginId().equals(dbLm.getLoginId()) && lm.getPwd().equals(dbLm.getPwd)){
         return true;
      }
      return false;
   }
}

 

/*实现普通用户的登陆*/
public class NormalLogin extends LoginTemplate{
    public LoginModel findLoginUser(String loginId){
       LoginModel lm = new LoginModel();
       lm.setLoginId(loginId);
       lm.setPwd("normalpwd");
    }
}

/*实现工作人员的登陆,密码需要加密验证*/
public class WorkerLogin extends LoginTemplate{
    public LoginModel findLoginUser(String loginId){
       LoginModel lm = new LoginModel();
       lm.setLoginId(loginId);
       lm.setPwd("workerpwd");
    }
    //覆盖父类的密码加密方法,提供真正的实现
    public String encryptPwd(){
       System.out.println("使用MD5进行密码加密");
       return pwd;
    }
}

   

/*客户端登陆*/
public class Client{
    public static void main(String args[]){
        LoginModel lm = new LoginModel();
        lm.setLoginId("admin");
        lm.setPwd("workerpwd");
        //准备用来判断的对象
        LoginTemplate lt = new WorkerLogin();
        LoginTemplate lt2 = new NormalLogin();
        //进行登陆测试
        boolean flag = lt.login(lm);
        System.out.println("可以登陆工作平台:" + flag);
        boolean flag2 = lt2.login(lm);
        System.out.println("可以普通人员登陆:" + flag2);     
    }
}

 

3.实际应用

      模板方法模式的功能在于固定算法骨架,而让具体算法可以扩展。模板可以采用抽象类也可以采用接口,通常既要约束子类的行为,又要为子类提供公共的功能的时候使用抽象类作为模板。

 

模板方法模式的本质:固定算法骨架

 

 

分享到:
评论

相关推荐

    设计模式--模板方法模式java例子

    模板方法模式是设计模式中行为型模式的一种,它在软件工程中扮演着非常重要的角色,尤其是在Java编程中。模板方法模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。它允许子类不改变一个算法的结构即可重...

    JAVA-设计模式-行为型模式-模板方法模式

    JAVA-设计模式-行为型模式-模板方法模式

    设计模式-模板方法模式ppt

    ### 设计模式之模板方法模式解析 #### 一、引言 在软件开发过程中,我们经常面临这样的场景:有一些步骤是固定的,而某些步骤则可能因具体实现而异。为了解决这类问题,设计模式中引入了一种叫做“模板方法模式”的...

    设计模式精解-GoF-23种设计模式解析--附C++源代码

    设计模式是软件工程中的一种最佳实践,用于解决在软件开发过程中常见的问题。这些模式是由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位大师,通常被称为GoF(Gang of Four),在他们的经典著作...

    c++设计模式-行为型模式-模板方法模式

    c++设计模式-行为型模式-模板方法模式;qt工程;c++简单源码; 模板方法(Template Method)模式的定义如下:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重...

    设计模式-模板方法模式(讲解及其实现代码)

    模板方法模式是一种行为设计模式,它允许在定义行为框架的同时,延迟部分具体步骤到子类中实现。这种模式主要用于在父类中定义算法的骨架,而将一些步骤的实现细节留给子类去完成,从而使得不同的子类可以重用相同的...

    11.设计模式-模板方法模式1

    模板方法模式(Template Method Pattern)是一种行为设计模式,它允许在父类中定义算法的框架,然后由子类提供具体的实现。这种模式的核心是“模板方法”,它在父类中定义了一个操作的步骤顺序,并将某些步骤声明为...

    C++设计模式--基于Qt4开源跨平台开发框架

    设计模式是软件工程中的重要概念,它们是经过时间和实践验证的解决特定问题的模板,能够提升代码的可读性、可维护性和复用性。而Qt4作为一个强大的开源库,提供了丰富的功能,使得开发者能够在多个操作系统上构建...

    C# 设计模式系列教程-模板方法模式

    1. 概述  定义一个操作中的算法的骨架,而将步骤延迟到子类中。模板方法使得子类可以不改变一个... 3.2 模板方法模式代码实现 /// /// 抽象类 /// public abstract class AbstractClass { // 一些抽象行为

    设计模式总结-模板设计模式,单例模式(singleTon)

    ### 设计模式总结:模板设计模式与单例模式 #### 模板设计模式 模板设计模式是一种行为型设计模式,它定义了一个算法的骨架,并允许子类为算法的某些步骤提供具体的实现。通过这种方式,算法的基本流程保持不变,...

    设计模式课件大全

    PPT内容包括:内附代码,实例,方便理解。 继承、封装、多态、UML 设计模式02 设计模式03-创建型模式 ...设计模式16-策略模式、模板方法、访问者 此PPT实例便于理解,对于深入理解OO思想有很大帮助。

    java设计模式-模板模式

    模板模式是一种行为设计模式,它在面向对象编程中扮演着重要的角色。此模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。这样,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤...

    设计模式教程-模版方法

    模板方法设计模式是一种在面向对象设计中常用的行为型设计模式,它定义了操作中的算法骨架,而将一些步骤延迟到子类中。这种模式允许子类在不改变算法整体结构的情况下,重定义某些特定步骤。 在软件开发中,模板...

    设计模式之模板方法模式

    模板方法模式是面向对象设计模式中的行为模式之一,它在Java等面向对象编程语言中有着广泛的应用。模板方法模式的主要思想是在一个抽象类中定义一个算法的骨架,而将一些步骤延迟到子类中实现。这样,子类可以重写...

    设计模式精解-GoF23种设计模式解析附C++实现源码

    设计模式是软件工程中的一种重要思想,它是在特定情境下,为解决常见问题而形成的一套最佳实践。GoF(Gang of Four)23种设计模式是软件开发中的经典,由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides...

    java模式--模板模式实例代码

    模板模式是一种行为设计模式,它使你能在代码中定义一个操作的不同步骤,并让子类决定这些步骤如何执行。模板模式提供了创建算法结构的通用接口,而具体的实现则由子类来完成。这种模式允许在不修改原有代码的情况下...

    设计模式精解-GoF 23种设计模式解析附C++.pdf

    ### 设计模式精解——GoF 23种设计模式解析及C++实现 #### 0. 引言 设计模式作为面向对象编程的核心组成部分,是软件开发者在长期实践中总结出来的最佳实践。通过深入理解这些设计模式,我们可以更好地进行面向...

    java设计模式---诙谐易懂版

    例如,代理模式(Proxy Pattern)、单例模式(Singleton Pattern)、工厂方法模式(Factory Method Pattern)、抽象工厂模式(Abstract Factory Pattern)、适配器模式(Adapter Pattern)、模板方法模式(Template ...

    Java设计模式----通俗易懂版

    这个资源"Java设计模式----通俗易懂版"显然是一个专门针对初学者或需要深入理解设计模式的开发者编写的指南。作者以形象生动的例子解释了23种经典的Java设计模式,使得复杂的概念变得更加易于理解。 首先,我们要...

Global site tag (gtag.js) - Google Analytics