设计模式系列3--适配器模式

来源:互联网 发布:轻薄笔记本推荐 知乎 编辑:程序博客网 时间:2024/05/22 01:48

    适配器模式 :     将原接口转化为客户希望的另一个接口



   适配器种类:  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



 


  

 

0 0
原创粉丝点击