学习资料
模板模式
顾名思义,模板模式是提供一个模板,有固定的步骤去完成。就好比教学教程,告诉你第一步怎么走,第二步怎么走,。。直到通关。
可以拿学习资料中的例子来说,ORM框架在执行SQL时入参(SQL语句,rowMapper方法,方法参数)和返参(执行SQL后返回的类型)可能会有所不同,一定会经过7个步骤,我们可以将这7个步骤抽离出来,其它需要自己单独实现的则由继承类去单独实现,所以模板模式中模板类一定是抽象类。
public List<?> executeQuery(String sql, RowMapper<?> rowMapper, Object[] values) {try {//1、获取连接Connection conn = this.getConnection();//2、创建语句集PreparedStatement prepareStatement = createPrepareStatement(conn, sql);//3、执行语句集ResultSet resultSet = executeQuery(prepareStatement, values);//4、处理结果集paresResultSet(resultSet, rowMapper);//5、关闭结果集closeResultSet(resultSet);//6、关闭语句集closeStatement(prepareStatement);//7、关闭连接closeConnection(conn);} catch (Exception e) {e.printStackTrace();}return null;}
模板方法适用于以下应用场景:
1、一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。
2、各子类中公共的行为被提取出来并集中到一个公共的父类中,从而避免代码重复。
优点:
1、利用模板方法将相同处理逻辑的代码放到抽象父类中,可以提高代码的复用性。
2、将不同的代码不同的子类中,通过对子类的扩展增加新的行为,提高代码的扩展性。
3、把不变的行为写在父类上,去除子类的重复代码,提供了一个很好的代码复用平台,
符合开闭原则。
缺点:
1、类数目的增加,每一个抽象类都需要一个子类来实现,这样导致类的个数增加。
2、类数量的增加,间接地增加了系统实现的复杂度。
3、继承关系自身缺点,如果父类添加新的抽象方法,所有子类都要改一遍。
适配器模式
适配器模式(Adapter Pattern)是指将一个类的接口转换成客户期望的另一个接口,使原本的接口不兼容的类可以一起工作,属于结构型设计模式。其作用是对已有的业务在不进行修改代码的情况下进行扩展并兼容。
**
适配器适用于以下几种业务场景:
1、已经存在的类,它的方法和需求不匹配(方法结果相同或相似)的情况。
2、适配器模式不是软件设计阶段考虑的设计模式,是随着软件维护,由于不同产品、不同厂家造成功能类似而接口不相同情况下的解决方案。
举例:登录接口
旧系统的登录可能只是账号密码进行登录,由于互联网APP的发展,此时第三方登录的方式也逐渐增多,第三方登录的各有不同,所以需要在原有的系统接口下进行修改。
- 首先创建一个接口,根据根据实现类去完成不同平台的登录逻辑
- 再创建登录类对原有的方法继承,加入第三方登录方法,根据调用方法去获取对应的适配器

该适配器模式和策略模式相似,都是根据调用方法去选择已写好的算法,但不同的是适配器模式是对原有接口的增强,适配器模式主要是解决兼容性问题(上面的LoginAdapter的support()方法则是对兼容性问题进行判断)
适配器的优缺点
优点:
1、能提高类的透明性和复用,现有的类复用但不需要改变。
2、目标类和适配器类解耦,提高程序的扩展性。
3、在很多业务场景中符合开闭原则。
缺点:
1、适配器编写过程需要全面考虑,可能会增加系统的复杂性。
2、增加代码阅读难度,降低代码可读性,过多使用适配器会使系统代码变得凌乱。
