java设计模式--适配器模式(Adapter)

最近研究java设计模式,感觉挺有意思的。所以记录网上找到的一些资料

原文出处:http://blog.csdn.net/jjwwmlp456/article/details/39893723

平时我们会经常碰到这样的情况,有了两个现成的类,它们之间没有什么联系,但是我们现在既想用其中一个类的方法,同时也想用另外一个类的方法。有一个解决方法是,修改它们各自的接口,但是这是我们最不愿意看到的。这个时候Adapter模式就会派上用场了
适配器 模式 有三种方式,一种是对象适配器,一种是类适配器, 一种是接口适配器
以下举例说明:
类适配器 类图
java设计模式--适配器模式(Adapter)_第1张图片

[java] view plain copy print?
public class DrawRectangle {
    //画方  
    public void drawRectangle(String msg) {  
        System.out.println("draw Rectangle: " + msg);  
    }  
}  
[java] view plain copy print?
public interface IDrawCircle {
    //画圆的接口  
    void drawCircle();  
}  
[java] view plain copy print?
/** 
 * 类适配器 使用对象继承的方式,是静态的定义方式 
 * @author stone 
 * 
 */  
public class DrawAdapter4Class extends DrawRectangle implements IDrawCircle {
     //既能画方又能画圆  

    @Override  
    public void drawCircle() {  
        System.out.println("DrawAdapter4Class: drawCircle");  
    }  

}  

java设计模式--适配器模式(Adapter)_第2张图片

[java] view plain copy print?
/** 
 * 对象适配器: 使用对象组合的方式,是动态组合的方式。 
 * 既能画方又能画圆 
 * @author stone 
 * DrawAdapter是适配器,DrawRectangle属于adapter,是被适配者,适配器将被适配者和适配目标(DrawCircle)进行适配 
 * 
 */  
public class DrawAdapter4Object implements IDrawCircle {
     //既能画方又能画圆  

    private DrawRectangle drawRectangle;  
    public DrawAdapter4Object(DrawRectangle drawRectangle) {  
        this.drawRectangle = drawRectangle;  
    }  

    @Override  
    public void drawCircle() {  
        System.out.println("DrawAdapter4Object: drawcircle");  
    }  

    public void drawRectangle(String msg) {  
        drawRectangle.drawRectangle(msg);  
    }   

}  

java设计模式--适配器模式(Adapter)_第3张图片

[java] view plain copy print?
/* 
 * 接口适配器:接口中有抽象方法,我们只想实现其中的几个,不想全部实现, 
 * 所以提供一个默认空实现,然后继承自它,重写实现我们想实现的方法 
 */  
public interface IDraw {  
    void drawCircle();  
    void drawRectangle();  
}  
/* 
 * 接口适配器 的默认实现 
 */  
public class DefaultDrawAdapter implements IDraw {
     //画方 画圆 皆为空实现  

    @Override  
    public void drawCircle() {  

    }  

    @Override  
    public void drawRectangle() {  

    }  
}  
[java] view plain copy print?
public class Test {
       
    public static void main(String[] args) {  
        //对象适配器  
        DrawAdapter4Object objAdapter = new DrawAdapter4Object(new DrawRectangle());  
        objAdapter.drawCircle();  
        objAdapter.drawRectangle(" in DrawAdapter4Object");  

        System.out.println("--------------");  

        //类适配器  
        DrawAdapter4Class clzAdapter = new DrawAdapter4Class();  
        clzAdapter.drawCircle();  
        clzAdapter.drawRectangle("in DrawAdapter4Class");  

        System.out.println("--------------");  

        //接口适配器  
        MyDrawAdapter myDrawAdapter = new MyDrawAdapter();  
        myDrawAdapter.drawCircle();  
        myDrawAdapter.drawRectangle();  
    }  

    static class MyDrawAdapter extends DefaultDrawAdapter {
       

        @Override  
        public void drawCircle() {  
            System.out.println("drawCircle in MyDrawAdapter");  
        }  

    }  
}  

打印

plain] view plain copy print?
DrawAdapter4Object: drawcircle  
draw Rectangle:  in DrawAdapter4Object  
--------------  
DrawAdapter4Class: drawCircle  
draw Rectangle: in DrawAdapter4Class  
--------------  
drawCircle in MyDrawAdapter  

你可能感兴趣的:(java设计模式,java设计模式,java)