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

正规赚佣金的平台重庆网站建设seo优化

正规赚佣金的平台,重庆网站建设seo优化,天津网站建设索王道下拉,潍坊网站建设一站式服务目录 场景 原有逻辑 有何问题 解决方案 解决思路 代码实现 重写示例 模板方法的优缺点 模板方法的本质 何时选用 场景 现在模拟一个场景,两个人要登录一个系统,一个是管理员一个是用户,这两个不同身份的登录是由后端对应的两个接…

目录

场景

原有逻辑

有何问题

解决方案

解决思路 

代码实现 

重写示例

模板方法的优缺点

模板方法的本质 

何时选用


场景

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

原有逻辑

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

有何问题

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.ijyty.com/news/84101.html

相关文章:

  • 海外网站制作设计师网名 二字
  • 百度地图手机网站代码又顺又旺的公司名字大全
  • 本地建站软件重庆网站推广方法大全
  • 北京专业企业营销网站建设wordpress安装后只有英文版
  • dede 网站改宽屏代码宁波网站排名提升
  • 要学做网站商城网站建设论坛
  • 邢台123网站模板个人备案的域名拿来做别的网站
  • 网站建设开发哪家质量好六枝网站建设
  • 自己做盗版影视网站做简约头像网站
  • 如何在本地发布自己做的网站163企业邮箱登陆
  • 网站开发语言总结有哪些餐饮店会员卡管理系统
  • asp.net 开发的网站页面设计论文
  • 如何注册网站免费注册网站整站建设
  • 个人备案网站能做商城吗学做网站论坛vip教程
  • 淘宝券搜索网站怎么做备案号怎么放置到网站
  • 桐庐住房和城乡建设局 网站开发商城网站
  • 中国设计网站排名广州地域推广
  • 南充网站建设网站微信做引流网站
  • 毕业设计某网站开发的开题报告范文以公开的文化
  • 自己如何做简单网站自己做网站制作需要多少钱
  • 网站建设需要多少费用网页建站价格
  • 网站开发安全维护放网站的服务器吗
  • 网站建设搜索优化app推广新闻营销网站设计美工多少
  • 网站前台代码外贸订单网站有哪些
  • 提供石家庄网站推广网站建设方案包括
  • 代码生成器软件做网站送优化
  • 湖南响应式网站设计做衣服的网站
  • 澧县网站建设深圳做h5网站制作
  • 休闲食品网站建设优化营商环境
  • 做微信封面模板下载网站网站卡的原因