纪检部门网站举报建设,wordpress开启全站ssl,wordpress 帐号共用,上海网站建设|网站制作模板方法模式和门面模式模板方法模式代码示例门面模式代码示例门面模式的应用场景模板方法模式
模板方法模式非常简单#xff0c;就是定义了一个固定的公共流程#xff0c;整个流程有哪些步骤是事先定义好的#xff0c;具体的步骤则交由子类去实现。属于行为型设计模式。 简…
模板方法模式和门面模式模板方法模式代码示例门面模式代码示例门面模式的应用场景模板方法模式
模板方法模式非常简单就是定义了一个固定的公共流程整个流程有哪些步骤是事先定义好的具体的步骤则交由子类去实现。属于行为型设计模式。 简单来说就是将公共的行为抽取出来放到父类中实现不同的行为则交给子类自己实现
代码示例
模板模式十分简单我们用其实现一个去银行办理业务的例子无论你去银行办理什么业务都需要经过: 取号排队办理业务几个步骤 这里还增加了一个钩子方法对于某些特殊的情形可以增加额外的处理步骤
public abstract class AbstractBank {public void doBiz() {if(!isVip()) {getNum();waitForCall();}doBusiness();}protected abstract boolean isVip();public abstract void doBusiness();private void waitForCall() {System.out.println(排队中,等待叫号...);}private void getNum() {System.out.println(取号,准备排队...);}}
public class CrashBusiness extends AbstractBank{Overrideprotected boolean isVip() {return false;}Overridepublic void doBusiness() {System.out.println(办理现金业务...);}
}public class DebitBusiness extends AbstractBank{Overrideprotected boolean isVip() {return true;}Overridepublic void doBusiness() {System.out.println(办理贷款业务.....);}
}public class Test {public static void main(String[] args) {CrashBusiness crashBusiness new CrashBusiness();crashBusiness.doBiz();new DebitBusiness().doBiz();}
}
门面模式
门⾯模式也叫外观模式英⽂全称是 Facade Design Pattern。 在 GoF 的《设计模式》⼀书中门⾯模式是这样定义的 Provide a unified interface to a set of interfaces in a subsystem. Facade Pattern defines a higher-level interface that makes the subsystem easier to use. 门⾯模式为⼦系统提供⼀组统⼀的接⼝定义⼀组⾼层接⼝让⼦系统更易⽤。属于结构型模式。
经典的例子就是app和服务端的交互app有一个复杂模块需要从三个系统获取对应的数据来组装如果app之间和三个系统交互就要进行三次网络传输增加一个中间层将三个系统的接口进行整合封装对外提供一个接口给app调用那么就能明显提高性能
代码示例
我们需要根据用户的账号获取其订单信息, 那么我们先需要根据用户账号判断其是否已登录已登录的用户才可以 根据其账号获取到对应的id,然后再获取id对应的订单信息 public class LoginService {public boolean isLogin(String account) {return true;}
}public class GetUserInfo {public int getUserId(String account) {System.out.println(根据用户名称获取用户id);return 1;}
}public class GetUserOrderList {public ListString getOrderList(Integer id) {System.out.println(根据用户id找出其订单);return new ArrayList();}
}
public class OrderService {GetUserInfo userInfo new GetUserInfo();GetUserOrderList userOrderList new GetUserOrderList();LoginService loginService new LoginService();public ListString getOrderByUser(String account) throws Exception {if (loginService.isLogin(account)) {Integer id userInfo.getUserId(account);return userOrderList.getOrderList(id);}throw new Exception(not login);}
}public class Test {public static void main(String[] args) throws Exception {OrderService service new OrderService();service.getOrderByUser(xiaoming);}
}门面模式的应用场景
解决易⽤性问题
门⾯模式可以⽤来封装系统的底层实现隐藏系统的复杂性提供⼀组更加简单易⽤、更⾼层的接⼝。⽐如Linux 系统的调⽤函数就可以看作⼀种“门⾯”。它是 Linux 操作系统暴露给开发者的⼀组“特殊”的编程接⼝它封装了底层更基础的 Linux 内核调⽤。 从隐藏实现复杂性提供更易⽤接⼝这个意图来看门⾯模式有点类似之前讲到的迪⽶特法则最少知道原则和接⼝隔离原则两个有交互的系统只暴露有限的必要的接⼝。 除此之外门⾯模式还有点类似之前提到封装、抽象的设计思想提供更抽象的接⼝封装底层实现细节。
解决性能问题 通过将多个接⼝调⽤替换为⼀个门⾯接⼝调⽤减少⽹络通信成本提⾼ App 客户端的响应速度。