zoukankan      html  css  js  c++  java
  • 适配器

    (参考:http://www.cnblogs.com/java-my-life/archive/2012/04/13/2442795.html

    一、类适配器

    /DesignPatterns/src/com/louis/Adapter/Target.java

    /**
     * Project Name:DesignPatterns
     * File Name:Target.java
     * Package Name:com.louis.Adapter
     * Date:2017年11月1日下午7:43:10
     * Copyright (c) 2017, 2692613726@qq.com All Rights Reserved.
     *
    */
    
    package com.louis.Adapter;
    /**
     * ClassName:Target 
     * Function: TODO ADD FUNCTION. 
     * Reason:     TODO ADD REASON. 
     * Date:     2017年11月1日 下午7:43:10 
     * @author   michael
     * @version  
     * @since    JDK 1.7
     * @see      
     */
    public interface Target {
        //源类也有的方法
        public void sampleOperation1();
        
        //源类没有地方法
        public void sampleOperation2();
    }

    /DesignPatterns/src/com/louis/Adapter/Adaptee.java

    /**
     * Project Name:DesignPatterns
     * File Name:Adaptee.java
     * Package Name:com.louis.Adapter
     * Date:2017年11月1日下午7:46:30
     * Copyright (c) 2017, 2692613726@qq.com All Rights Reserved.
     *
    */
    
    package com.louis.Adapter;
    /**
     * ClassName:Adaptee 
     * Function: TODO ADD FUNCTION. 
     * Reason:     TODO ADD REASON. 
     * Date:     2017年11月1日 下午7:46:30 
     * @author   michael
     * @version  
     * @since    JDK 1.7
     * @see      
     */
    public class Adaptee {
        public void sampleOperation1(){}
    }

    /DesignPatterns/src/com/louis/Adapter/Adapter.java

    /**
     * Project Name:DesignPatterns
     * File Name:Adapter.java
     * Package Name:com.louis.Adapter
     * Date:2017年11月1日下午7:47:57
     * Copyright (c) 2017, 2692613726@qq.com All Rights Reserved.
     *
    */
    
    package com.louis.Adapter;
    /**
     * ClassName:Adapter 
     * Function: TODO ADD FUNCTION. 
     * Reason:     TODO ADD REASON. 
     * Date:     2017年11月1日 下午7:47:57 
     * @author   michael
     * @version  
     * @since    JDK 1.7
     * @see      
     */
    public class Adapter extends Adaptee implements Target {
    
        /**
         * TODO 由于源类没有sampleOperation2()因此适配器补充上这个方法
         * @see com.louis.Adapter.Target#sampleOperation2()
         */
        public void sampleOperation2() {
            // TODO Auto-generated method stub
    
        }
    
    }

    对象适配器模式

      与类的适配器模式一样,对象的适配器模式把被适配的类的API转换成为目标类的API,与类的适配器模式不同的是,对象的适配器模式不是使用继承关系连接到Adaptee类,而是使用委派关系连接到Adaptee类。

    /DesignPatterns/src/com/louis/Adapter/AdapterObject.java

    /**
     * Project Name:DesignPatterns
     * File Name:AdapterObject.java
     * Package Name:com.louis.Adapter
     * Date:2017年11月1日下午7:53:38
     * Copyright (c) 2017, 2692613726@qq.com All Rights Reserved.
     *
    */
    
    package com.louis.Adapter;
    /**
     * ClassName:AdapterObject 
     * Function: TODO ADD FUNCTION. 
     * Reason:     TODO ADD REASON. 
     * Date:     2017年11月1日 下午7:53:38 
     * @author   michael
     * @version  
     * @since    JDK 1.7
     * @see      
     */
    public class AdapterObject implements Target{
        private Adaptee adaptee;
        public AdapterObject(Adaptee adaptee){
            this.adaptee = adaptee;
        }
        
        //源类Adaptee有方法sampleOperation1,因此适配器直接委派即可
        public void sampleOperation1(){
            this.adaptee.sampleOperation1();
        }
    
        /**
         * TODO 源Adaptee没有方法sampleoperation2,因此由适配器需要补充此方法.
         * @see com.louis.Adapter.Target#sampleOperation2()
         */
        public void sampleOperation2() {
            // TODO Auto-generated method stub
            //写相关的代码
        }
        
        
    }

    缺省适配模式的结构

    /DesignPatterns/src/com/louis/Adapter/AbstractService.java

    /**
     * Project Name:DesignPatterns
     * File Name:AbstractService.java
     * Package Name:com.louis.Adapter
     * Date:2017年11月1日下午8:09:10
     * Copyright (c) 2017, 2692613726@qq.com All Rights Reserved.
     *
    */
    
    package com.louis.Adapter;
    /**
     * ClassName:AbstractService 
     * Function: TODO ADD FUNCTION. 
     * Reason:     TODO ADD REASON. 
     * Date:     2017年11月1日 下午8:09:10 
     * @author   michael
     * @version  
     * @since    JDK 1.7
     * @see      
     */
    public interface AbstractService {
        public void serviceOperation1();
        
        public int serviceOperation2();
        
        public String serviceOperation3();
    }

    /DesignPatterns/src/com/louis/Adapter/ServiceAdapter.java

    /**
     * Project Name:DesignPatterns
     * File Name:ServiceAdapter.java
     * Package Name:com.louis.Adapter
     * Date:2017年11月1日下午8:10:35
     * Copyright (c) 2017, 2692613726@qq.com All Rights Reserved.
     *
    */
    
    package com.louis.Adapter;
    /**
     * ClassName:ServiceAdapter 
     * Function: TODO ADD FUNCTION. 
     * Reason:     TODO ADD REASON. 
     * Date:     2017年11月1日 下午8:10:35 
     * @author   michael
     * @version  
     * @since    JDK 1.7
     * @see      
     */
    public class ServiceAdapter implements AbstractService {
    
        /**
         * TODO 简单描述该方法的实现功能(可选).
         * @see com.louis.Adapter.AbstractService#serviceOperation1()
         */
        @Override
        public void serviceOperation1() {
            // TODO Auto-generated method stub
    
        }
    
        /**
         * TODO 简单描述该方法的实现功能(可选).
         * @see com.louis.Adapter.AbstractService#serviceOperation2()
         */
        @Override
        public int serviceOperation2() {
            // TODO Auto-generated method stub
            return 0;
        }
    
        /**
         * TODO 简单描述该方法的实现功能(可选).
         * @see com.louis.Adapter.AbstractService#serviceOperation3()
         */
        @Override
        public String serviceOperation3() {
            // TODO Auto-generated method stub
            return null;
        }
    
    }
    可以看到,接口AbstractService要求定义三个方法,分别是serviceOperation1()、serviceOperation2()、serviceOperation3();而抽象适配器类ServiceAdapter则为这三种方法都提供了平庸的实现。因此,任何继承自抽象类ServiceAdapter的具体类都可以选择它所需要的方法实现,而不必理会其他的不需要的方法。
  • 相关阅读:
    二、Blender/Python API总览
    一、Blender/Python 快速入门
    【翻译】View Frustum Culling --3 Clip Space Approach – Extracting the Planes
    【翻译】View Frustum Culling --2 Geometric Approach – Extracting the Planes
    【翻译】 View Frustum Culling --1 View Frustum’s Shape
    列表切片
    numpy--深度学习中的线代基础
    基于正则表达式用requests下载网页中的图片
    Python基础知识整理
    C++ | boost库 类的序列化
  • 原文地址:https://www.cnblogs.com/Michael2397/p/7768236.html
Copyright © 2011-2022 走看看