zoukankan      html  css  js  c++  java
  • 设计模式之--适配器模式(Adapter)

    定义:Convert a interface of class into anthoer interface clients expect.
         Adapter let classes work together that could't otherwise because of incompatible interfaces
       将实现某种接口的类转换成客户端希望的另一种接口接收方式.适配器让原本由于实现不同接口而无法一起应用的类在一起工作。

    其他:适配器分为类适配器 和 对象适配器
         类适配:适配器通过继承第三方类,来整合第三方的资源到客户端需要的类中
         对象适配器:适配器通过聚合第三方的类,来整合地方的资源到客户端需要的类中(常用)

    对象适配器类图:

    一:接口

    package dmode.adapter;
    
    /** 
     * 类描述:人类接口  
     * @version 1.0  CreateDate: 2015-2-15
     *
     * @updateDate            
     * @updatePerson        
     * @declare 
     */
    public interface IPerson {
        
        /**
         * 方法描述:自我介绍
         */
        public void selfIntrouction();
    }

    二:客户端实现类

    package dmode.adapter;
    
    /** 
     * 类描述:  中国人
     * @version 1.0  CreateDate: 2015-2-15
     *
     * @updateDate            
     * @updatePerson        
     * @declare 
     */
    public class ChinaPerson implements IPerson{
        
        public ChinaPerson(){
        }
        
        public ChinaPerson(String name_x,String name_m){
            this.name_x = name_x;
            this.name_m = name_m;
        }
        
        /**
         * 中国人的姓
         */
        private String name_x;
        
        /**
         * 中国人的名
         */
        private String name_m;
    
        /**
         * @see dmode.adapter.IPerson#selfIntrouction()
         */
        @Override
        public void selfIntrouction() {
            System.out.println("你好,我叫" + name_x + name_m);
        }
    
        /**
         * @param name_x the name_x to set
         */
        public void setName_x(String name_x) {
            this.name_x = name_x;
        }
    
        /**
         * @param name_m the name_m to set
         */
        public void setName_m(String name_m) {
            this.name_m = name_m;
        }
    
    }

    三 第三方类(需要被适配的对象)

    package dmode.adapter;
    
    /** 
     * 类描述:  美国人
     * @version 1.0  CreateDate: 2015-2-15
     *
     * @updateDate            
     * @updatePerson        
     * @declare 
     */
    public class AmerPerson  {
        
        public AmerPerson(){
            
        }
        
        public AmerPerson(String name_first,String name_last){
            this.name_first = name_first;
            this.name_last = name_last;
        }
        
        /**
         * 美国人的名字
         */
        private String name_first;
        
        /**
         * 美国人的姓氏
         */
        private String name_last;
    
        /**
         * 方法描述:美国人自我介绍
         * @param person
         */
        public void showSelf() {
            System.out.println("hello,I am" + name_first + "." + name_last);
        }
    
        /**
         * @return the name_first
         */
        public String getName_first() {
            return name_first;
        }
    
        /**
         * @return the name_last
         */
        public String getName_last() {
            return name_last;
        }
    }

    四:适配器(此处为对象适配器,通过聚合,类适配器需要继承第三方类)

    package dmode.adapter;
    
    /** 
     * 类描述:  人员适配器
     * @version 1.0  CreateDate: 2015-2-15
     *
     * @updateDate            
     * @updatePerson        
     * @declare 
     */
    public class AdapterPerson implements IPerson{
        
        private AmerPerson amerPerson;
        
        public AdapterPerson(AmerPerson _amerPerson){
            this.amerPerson = _amerPerson;
        }
    
        /**
         * @see dmode.adapter.IPerson#selfIntrouction()
         */
        @Override
        public void selfIntrouction() {
            System.out.println("你好,我叫" + amerPerson.getName_last() + amerPerson.getName_first());
        }
        
    }

    五:应用场景

    package dmode.adapter;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /** 
     * 类描述: 场景 ,人员做自我介绍
     * @version 1.0  CreateDate: 2015-2-15
     *
     * @updateDate            
     * @updatePerson        
     * @declare 
     */
    public class Client {
        
        public static void main(String[] args) {
            
            //美国式的自我介绍
            AmerPerson amerPerson = new AmerPerson("迈克尔","乔丹");
            amerPerson.showSelf();
            
            //将美国人变成适配器人进行中国式的自我介绍
            List<IPerson> persons = new ArrayList<IPerson>();
            //IPerson chinaPerson = new ChinaPerson("张","三");
            IPerson person = new AdapterPerson(amerPerson);
            persons.add(person);
            for(IPerson per : persons){
                per.selfIntrouction();
            }
        }
    }

    结果:

    hello,I am迈克尔.乔丹
    你好,我叫乔丹迈克尔

  • 相关阅读:
    深入理解iOS开发中的锁
    整理:iOS开发算法资料
    (二)ELK Filebeat简介
    (一)ELK 部署
    zabbix + grafana 展示
    (二)LVS介绍
    (一)集群介绍
    zabbix 监控 ESXI
    zabbix proxy 安装
    zabbix fping 监控网络质量
  • 原文地址:https://www.cnblogs.com/leonkobe/p/4292935.html
Copyright © 2011-2022 走看看