设计模式系列3--适配器模式
2015-09-01 10:32
267 查看
适配器模式 : 将原接口转化为客户希望的另一个接口
适配器种类: 1 对象的适配 (通过 在新的接口 拥有老接口对象的引用)
2 类的适配 (通过 继承) 由于类适配器模式通过多重继承对一个接口与另一个接口进行匹配,而C#、java等语言都不支持多重继承,因而这里只是介绍对象适配器。
下面举例说明
目前系统拥有 PC网站, app 2个 登录功能, 都实现了 login接口, 参数要求( 用户名 密码 )
网站和 app 都实现了登录功能,但后来产品经理说,APP不要每次都登录,可以把登录的userid保留在COOKIES,下次自动登录
修改前:
1 User 类
package design.Adapter;
public class User {
String name;
String pwd;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}
2 登录类 接口
package design.Adapter;
public interface Logining {
//处理登录
public boolean Login(String name,String pwd);
}
3 APP 登录 实现类
package design.Adapter;
public class App implements Logining {
@Override
public boolean Login(String name, String pwd) {
System.out.println("APP登录成功,用户名:"+name);
//增加其他 功能 ,比如 操作日志 之类的
return true;
}
}
---------------------------需要为 APP提供 额外的登录方法 为APP增加适配类,用来复用原有代码------------------
package design.Adapter;
public class App2 {
//持有 原有接口的引用
Logining appLogin;
public boolean appLogin2(int userid)
{
//通过 cookies传来的userid 查询数据库
User user =User.findById(userid);
appLogin =new App();
// 调用原接口 , 不修改原有业务代码 ,
return appLogin.Login(user.name, user.pwd);
}
}
好了 ,适配器 代码写完了。 是不是 有点像 Proxy 代理模式?
代理模式 要求: 实现类 和代理类 实现相同接口 ,而我们这里新的 类 不需要实现相同接口, 只需要持有 原有接口的引用。
搜easy
适配器种类: 1 对象的适配 (通过 在新的接口 拥有老接口对象的引用)
2 类的适配 (通过 继承) 由于类适配器模式通过多重继承对一个接口与另一个接口进行匹配,而C#、java等语言都不支持多重继承,因而这里只是介绍对象适配器。
下面举例说明
目前系统拥有 PC网站, app 2个 登录功能, 都实现了 login接口, 参数要求( 用户名 密码 )
网站和 app 都实现了登录功能,但后来产品经理说,APP不要每次都登录,可以把登录的userid保留在COOKIES,下次自动登录
修改前:
1 User 类
package design.Adapter;
public class User {
String name;
String pwd;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}
2 登录类 接口
package design.Adapter;
public interface Logining {
//处理登录
public boolean Login(String name,String pwd);
}
3 APP 登录 实现类
package design.Adapter;
public class App implements Logining {
@Override
public boolean Login(String name, String pwd) {
System.out.println("APP登录成功,用户名:"+name);
//增加其他 功能 ,比如 操作日志 之类的
return true;
}
}
---------------------------需要为 APP提供 额外的登录方法 为APP增加适配类,用来复用原有代码------------------
package design.Adapter;
public class App2 {
//持有 原有接口的引用
Logining appLogin;
public boolean appLogin2(int userid)
{
//通过 cookies传来的userid 查询数据库
User user =User.findById(userid);
appLogin =new App();
// 调用原接口 , 不修改原有业务代码 ,
return appLogin.Login(user.name, user.pwd);
}
}
好了 ,适配器 代码写完了。 是不是 有点像 Proxy 代理模式?
代理模式 要求: 实现类 和代理类 实现相同接口 ,而我们这里新的 类 不需要实现相同接口, 只需要持有 原有接口的引用。
搜easy
相关文章推荐
- nyoj 525 一道水题【字符串(分割)】
- Oracle 051 的几个题 (oracle 11g)
- FilenameFilter总结
- VMWare联网
- JavaScript中知而不全的this (转)
- ### 博客目录
- 通过反射查找泛型的属性值
- 第六章:数组和字符串
- flash脚本as3的位运算符
- 解决ftp客户端 建立数据socket 失败问题
- 关于memset函数
- HDU 3577 Fast Arrangement(线段树功能:区间更新,查询区间的最大覆盖次数)
- android 4.4 监听USB连接状态
- 字符数组与字符指针
- 常见的正则验证
- Nginx RTMP 流媒体直播
- Android NDK学习 <六> 复杂结构动态库处理和第三方库的移植
- 面试知识储备_操作系统:处理机调度与死锁
- SVN添加分支
- JS 多种变量定义