您的位置:首页 > 其它

设计模式系列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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: