当前位置: 首页 > news >正文

小企业网站建设查询网络广告网站

小企业网站建设查询,网络广告网站,校园安全网站建设,网页颜色搭配的推荐目录 场景 原有逻辑 有何问题 解决方案 解决思路 代码实现 重写示例 模板方法的优缺点 模板方法的本质 何时选用 场景 现在模拟一个场景,两个人要登录一个系统,一个是管理员一个是用户,这两个不同身份的登录是由后端对应的两个接…

目录

场景

原有逻辑

有何问题

解决方案

解决思路 

代码实现 

重写示例

模板方法的优缺点

模板方法的本质 

何时选用


场景

现在模拟一个场景,两个人要登录一个系统,一个是管理员一个是用户,这两个不同身份的登录是由后端对应的两个接口实现的,用户登录只需验证库里是否存在,管理员登录时需要验证加密后的密码是否与数据库数据一致。

原有逻辑

这里大致说一下,创建了两个实体用来描述用户和管理员传来的用户名、密码。创建两个模块来分别处理用户和管理员的登录。

有何问题

1.重复或相似代码太多2.扩展不方便(比如要添加同一个编号同时只能登录一次,那这两个登录模块都要修改)

解决方案

模板方法

定义:

解决思路 

重复代码多、扩展不方便的原因在哪?就是因为没把那些相似的代码抽取出来做成公共的功能。

我们把具体的不同的步骤实现延迟到子类去实现,这样就可以通过子类来提供不同的功能实现了。

第一和第三个步骤是必不可少,第二个是可选的(可变的)。

先定义一个父类,并在内部提供一个方法来定义整个骨架。这个方法就是模板方法,然后把父类无法确定的实现,延迟到具体的子类来实现

代码实现 

肯定有一个携带了骨架方法的父类,不用想肯定是抽象类

package day14模板方法模式;public abstract class AbstractClass {/*** 原语操作1,所谓原语操作就是抽象的操作,必须要由子类提供实现*/public abstract void doPrimitiveOperation1();/*** 原语操作2,所谓原语操作就是抽象的操作,必须要由子类提供实现*/public abstract void doPrimitiveOperation2();/*** 模板方法*/public final void templateMethod(){doPrimitiveOperation1();doPrimitiveOperation2();}
}

具体实现

package day14模板方法模式;/*** 具体实现类,实现原语操作*/
public class ConcreteClass extends AbstractClass{@Overridepublic void doPrimitiveOperation1() {}@Overridepublic void doPrimitiveOperation2() {}
}

重写示例

我们要实现登录的合并,首先需要一个共同的参数接收类

package day14模板方法模式;/*** 封装进行登录控制所需要的数据*/
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;}}

接下来定义公共的登录控制算法骨架

package day14模板方法模式;/*** 登录控制的模板*/
public abstract class LoginTemplate {public final boolean login(LoginModel lm){LoginModel loginUser = this.findLoginUser(lm.getLoginId());if (loginUser != null){String pwd = this.encryptPwd(lm.getPwd());lm.setPwd(pwd);// 判断是否匹配的上return this.match(lm,loginUser);}return false;}public boolean match(LoginModel lm, LoginModel loginUser){if (lm.getLoginId().equals(loginUser.getLoginId()) && lm.getPwd().equals(loginUser.getPwd())){return true;}return false;}/*** 根据登陆编号来查找和获取存储中相应的数据* @param loginId* @return*/public abstract LoginModel findLoginUser(String loginId);/*** 对密码数据进行加密*/public String encryptPwd(String pwd){return pwd;}
}

实现用户登录控制的逻辑处理

package day14模板方法模式;/*** 普通用户登录控制的逻辑处理*/
public class NormalLogin extends LoginTemplate {@Overridepublic LoginModel findLoginUser(String loginId) {// 这里省略具体的处理,仅作示意,返回一个有默认数据的对象LoginModel loginModel = new LoginModel();loginModel.setLoginId(loginId);loginModel.setPwd("testPwd");return loginModel;}
}

管理员登录控制的逻辑处理

package day14模板方法模式;/*** 工作人员登录控制的逻辑处理*/
public class WorkerLogin extends LoginTemplate {@Overridepublic LoginModel findLoginUser(String loginId) {// 这里省略具体的处理,仅作示意,返回一个有默认数据的对象LoginModel loginModel = new LoginModel();loginModel.setLoginId(loginId);loginModel.setPwd("testPwd");return loginModel;}@Overridepublic String encryptPwd(String pwd) {System.out.println("使用MD5加密");return super.encryptPwd(pwd);}
}

Client

package day14模板方法模式;public class Client {public static void main(String[] args) {// 准备登陆人的信息LoginModel loginModel = new LoginModel();loginModel.setLoginId("admin");loginModel.setPwd("workerpwd");// 准备用来判断的对象WorkerLogin workerLogin = new WorkerLogin();NormalLogin normalLogin = new NormalLogin();// 进行登录测试boolean login = workerLogin.login(loginModel);System.out.println("管理员可以登录= " + login);boolean login1 = normalLogin.login(loginModel);System.out.println("用户可以登录=" + login1);}
}

模板方法的优缺点

模板方法的本质 

固定算法骨架

很好的体现了开闭原则和里氏替换原则

何时选用

http://www.hrbkazy.com/news/40899.html

相关文章:

  • wordpress优化插件灰色seo关键词排名
  • 备案 通过后 网站打不开2024年8月爆发新的大流行病毒吗
  • 荣添网站建设优化seo点击排名
  • 廊坊专门做网站淘宝代运营1个月多少钱
  • 合肥专门做网站的公司有哪些百度网站排名查询
  • 中文个人网站欣赏seo全网优化推广
  • wordpress商品多选搜狗seo刷排名软件
  • 河南靠谱seo电话中小企业网站优化
  • 永久新域名225222企业网站seo点击软件
  • 公司网站宣传淘宝营销推广方案
  • 运营最好的网站by72777最新域名查询
  • 网站建设需要哪些内容武汉大学人民医院院长
  • 算命网站做竞价赚钱优秀网站网页设计图片
  • 营销型企业网站建设教案软文的概念
  • wordpress 站外调用seo工具网站
  • wordpress附件上传seo黑帽有哪些技术
  • 事业单位网站建设方案网络营销研究背景及意义
  • 网站开发的一般过程搜索引擎seo
  • 做网站北京怎么开网站
  • 云南网站开发网络公司深圳网站页面设计
  • 做网站费用计入什么成都网站建设方案优化
  • 生成图片链接的网站江门网站建设
  • 广州建站客服招聘网页设计与制作个人网站模板
  • 全球电子商务网站排名怎么在百度推广
  • 常州市中大建设工程有限公司网站2022最新国际新闻10条简短
  • 知名网站建设公司好吗淘宝搜索关键词技巧
  • 抚顺网站推广百度电脑版官网入口
  • 找人做网站需要注意什么提高seo排名
  • 滴滴一年亏损109亿seo推广培训学费
  • 网站设计公司佛山系统优化软件哪个好