<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                **定義**:將一個類的接口變換成客戶端所期待的的另一種接口,從而使原本因接口不匹配而無法在一起工作的兩個類能夠在一起工作。 **適配器一般模式:** ![](https://box.kancloud.cn/2016-06-06_5755340b0d43f.jpg) Target角色: 該角色定義把其他類轉換為何種接口,也就是我們的期望接口。 Adaptee源角色 你想把誰轉換成目標角色,這個“誰”是原角色,它是已經存在的、運行良好的類或對象,經過Adapter包裝,轉換成一個全新的角色。 Adapter適配器角色 適配器模式的核心角色,適配器角色是需要新建立的。你想把誰轉換成目標角色,就需要通過繼承或者類關聯的方式來操作。 ~~~ public class AdapterPattern { public static void main(String[] args) { //原有的業務邏輯 Target target = new ConcreteTarget(); target.doSomething(); //增加了適配器角色后的業務邏輯 Target target2 = new Adapter(); target2.doSomething(); } } /** * 目標角色,需要適配器所轉換的目標的。 * @author admin * */ interface Target{ //目標角色,所擁有的方法。 void doSomething(); } class ConcreteTarget implements Target{ @Override public void doSomething() { System.out.println("我是目標角色,現在要使用我的..."); } } /** * 源角色,適配器需要從這里轉換。 * @author admin * */ abstract class Adaptee{ public void doSome(){ System.out.println("我是源角色,從我這里轉變..."); } } /** * 適配器角色,將原角色轉換成目標角色。 * @author admin * */ class Adapter extends Adaptee implements Target{ @Override public void doSomething() { super.doSome(); } } ~~~ ## 一個例子: 已知A公司網站的員工信息規劃分類是IUserInfo。而B公司網站的員工信息是IOuterUser。 B公司有一部分人員外派到A公司,并且需要將員工信息加入到A公司的員工信息網站中。這樣由于兩者的接口不同, 所以要用到---適配器模式。 ![](https://box.kancloud.cn/2016-06-06_5755340b264c4.jpg) ~~~ public class AdapterTest { public static void main(String[] args) { //測試Adapter是否能用 IUserInfo userInfo = new UserAdapter(); //獲取員工家庭電話 System.out.println(userInfo.getUserName()+"---"+userInfo.getHomeTelNumber()); } } /** * A公司員工信息接口,是目標接口。 */ interface IUserInfo { //獲取員工姓名 String getUserName(); //獲取員工住址 String getUserAddress(); //獲取員工聯系方式 String getTelNumber(); //獲取辦公電話 String getOfficeTelNumber(); //獲取職位名稱 String getJobPosition(); //獲取家庭電話 String getHomeTelNumber(); } /** * B公司外派人員的基本信息接口,是個源角色,待轉換的角色。 * @author admin * */ interface IOuterInfo{ //基本信息 HashMap<String, String> getUserBaseInfo(); //辦公信息 HashMap<String, String> getOfficeInfo(); //家庭信息 HashMap<String, String> getHomeInfo(); } /** * B公司外派人員的實現接口。 * 他將一些具體信息分類,存儲在Map集合中。 * @author admin * */ class OuterInfo implements IOuterInfo{ /** * 用戶的基本信息 */ @Override public HashMap<String, String> getUserBaseInfo() { HashMap<String, String> baseInfoMap = new HashMap<String, String>(); baseInfoMap.put("userName", "lzl"); baseInfoMap.put("mobileNumber", "18931373457"); return baseInfoMap; } @Override public HashMap<String, String> getOfficeInfo() { HashMap<String, String> officeInfoMap = new HashMap<String, String>(); officeInfoMap.put("officeTelNumber", "0332-24438"); officeInfoMap.put("jobPosition","ceo"); return officeInfoMap; } @Override public HashMap<String, String> getHomeInfo() { HashMap<String, String> homeInfoMap = new HashMap<String, String>(); homeInfoMap.put("address", "華爾街"); homeInfoMap.put("homeTelNumber", "6753443"); return homeInfoMap; } } /** * 轉換角色,相當于Adapter, * 主要將原角色轉換成目標角色。 * @author admin * */ class UserAdapter extends OuterInfo implements IUserInfo{ @Override public String getUserName() { String name = super.getUserBaseInfo().get("userName"); return name; } @Override public String getUserAddress() { String address = super.getHomeInfo().get("address"); return address; } @Override public String getTelNumber() { String telNumber = super.getUserBaseInfo().get("mobileNumber"); return telNumber; } @Override public String getOfficeTelNumber() { String officeTelNumber = super.getOfficeInfo().get("officeTelNumber"); return officeTelNumber; } @Override public String getJobPosition() { String jobPosition = super.getOfficeInfo().get("jobPosition"); return jobPosition; } @Override public String getHomeTelNumber() { String homeTelNumber = super.getHomeInfo().get("homeTelNumber"); return homeTelNumber; } } ~~~ ## 適配器的擴展 B公司的員工設計表如果是這樣的怎么實現? 通過類關聯的方式實現適配器轉換。 ![](https://box.kancloud.cn/2016-06-06_5755340b46756.jpg) ~~~ public class AdapterTest { public static void main(String[] args) { //測試Adapter是否能用 IUserInfo userInfo = new UserAdapter(new BaseInfo(),new OfficeInfo(),new HomeInfo()); //獲取員工家庭電話 System.out.println(userInfo.getUserName()+"---"+userInfo.getHomeTelNumber()); } } /** * A公司員工信息接口,是目標接口。 */ interface IUserInfo { //獲取員工姓名 String getUserName(); //獲取員工住址 String getUserAddress(); //獲取員工聯系方式 String getTelNumber(); //獲取辦公電話 String getOfficeTelNumber(); //獲取職位名稱 String getJobPosition(); //獲取家庭電話 String getHomeTelNumber(); } /** * B公司外派人員的基本信息接口,是個源角色,待轉換的角色。 * @author admin * */ interface IBaserInfo{ //基本信息 HashMap<String, String> getUserBaseInfo(); } /** * B公司外派人員的辦公信息接口,是個源角色,待轉換的角色。 * @author admin * */ interface IOfficeUserInfo{ //辦公信息 HashMap<String, String> getOfficeInfo(); } /** * B公司外派人員的家庭信息接口,是個源角色,待轉換的角色。 * @author admin * */ interface IHomeInfo{ //家庭信息 HashMap<String, String> getHomeInfo(); } /** * B公司外派人員的實現接口。 * 他將一些具體信息分類,存儲在Map集合中。 * @author admin * */ class BaseInfo implements IBaserInfo{ /** * 用戶的基本信息 */ @Override public HashMap<String, String> getUserBaseInfo() { HashMap<String, String> baseInfoMap = new HashMap<String, String>(); baseInfoMap.put("userName", "lzl"); baseInfoMap.put("mobileNumber", "18931373457"); return baseInfoMap; } } /** * B公司外派人員的實現接口。 * 他將一些辦公信息分類,存儲在Map集合中。 * @author admin * */ class OfficeInfo implements IOfficeUserInfo{ @Override public HashMap<String, String> getOfficeInfo() { HashMap<String, String> officeInfoMap = new HashMap<String, String>(); officeInfoMap.put("officeTelNumber", "0332-24438"); officeInfoMap.put("jobPosition","ceo"); return officeInfoMap; } } /** * B公司外派人員的實現接口。 * 他將一些家庭信息分類,存儲在Map集合中。 * @author admin * */ class HomeInfo implements IHomeInfo{ @Override public HashMap<String, String> getHomeInfo() { HashMap<String, String> homeInfoMap = new HashMap<String, String>(); homeInfoMap.put("address", "華爾街"); homeInfoMap.put("homeTelNumber", "6753443"); return homeInfoMap; } } /** * 轉換角色,相當于Adapter, * 主要將原角色轉換成目標角色。 * @author admin * */ class UserAdapter implements IUserInfo{ private BaseInfo baseInfo; private OfficeInfo officeInfo; private HomeInfo homeInfo; private HashMap<String, String> baseInfoMap; private HashMap<String, String> officeInfoMap; private HashMap<String, String> homeInfoMap; public UserAdapter(BaseInfo baseInfo ,OfficeInfo officeInfo,HomeInfo homeInfo) { this.baseInfo = baseInfo; this.officeInfo = officeInfo; this.homeInfo = homeInfo; this.baseInfoMap = this.baseInfo.getUserBaseInfo(); this.officeInfoMap = this.officeInfo.getOfficeInfo(); this.homeInfoMap = this.homeInfo.getHomeInfo(); } @Override public String getUserName() { String name = this.baseInfoMap.get("userName"); return name; } @Override public String getUserAddress() { String address = this.homeInfoMap.get("address"); return address; } @Override public String getTelNumber() { String telNumber = this.baseInfoMap.get("mobileNumber"); return telNumber; } @Override public String getOfficeTelNumber() { String officeTelNumber = this.officeInfoMap.get("officeTelNumber"); return officeTelNumber; } @Override public String getJobPosition() { String jobPosition = this.officeInfoMap.get("jobPosition"); return jobPosition; } @Override public String getHomeTelNumber() { String homeTelNumber = this.homeInfoMap.get("homeTelNumber"); return homeTelNumber; } } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看