设计模式整理_适配器模式

  适配器模式将一个类的接口,转化为客户期望的另一个接口.适配器让原本接口不兼容的类可以合作无间.

  适配器的设计首先需要实现想转化成的类型接口,接着需要取得要适配的对象引用,可以利用构造器取得这个引用,然后可以用被适配的对象去实现需要实现的类型接口的方法.

  客户使用适配器的过程如下:

  1.客户通过目标接口调用适配器的方法对适配器发出请求.

  2.适配器使用被适配者接口把请求转化为被适配者的一个或多个调用接口.

  3.客户收到调用的结果,但并未察觉这一切是适配器起的转换作用.

  下面是对于适配器模式的示例,其中Book为用户所希望获得的接口,被适配的接口是Paper,适配器是BookAdapter.

  

//Book为所期望的目标接口
public interface Book {
    public void getBook();
}
class MathBook implements Book/*一个具体的实现类*/{
    public void getBook() {
        System.out.println("I am get a Math book.");
    }
}
class BookAdapter implements Book /*一个适配器对象*/{
    Paper paper;    //被适配的接口
    public BookAdapter(Paper paper)/*通过构造将被适配的接口传入适配器*/ {
        super();
        this.paper = paper;
    }
    @Override
    public void getBook() {
        for(int i=0;i<50;i++) {
            paper.getContent();
        }
    }
}
/*
 * 需要被适配的接口.
 * */
public interface Paper {
    public void getContent();
}
class APaper implements Paper {

    @Override
    public void getContent() {
        System.out.println("get the Content!");
    }
}
public class Test {
    public static void main(String[] args) {
        Paper p=new APaper();
        Book book=new MathBook();
        book.getBook();
        Book book2=new BookAdapter(p);    //通过适配器获取所需接口
        book2.getBook();
    }
}

  适配器模式的类图如下:

  

时间: 2024-10-02 09:07:19

设计模式整理_适配器模式的相关文章

设计模式整理_单例设计模式

单例设计模式,它确保一个类只有一个实例,并提供一个全局访问点. 由于单例设计模式对应的类只能创建一个对象,因此它所对应的方法必须是static(不是static只有创建对象才能调用). 以下是单例模式的一个经典实现:采用了延迟加载对象的例子. public class Single1 { private static Single1 single; //利用一个静态变量来记录Single1的唯一实例,这里没有直接声明,采用了延迟加载模式. private Single1(){} //把构造器声明

设计模式整理_组合模式

组合模式允许你将对象组成树形结构,来表现整体和部分的联系.组合能让客户以一致的方式处理个别对象和对象的组合. 组合模式将整体称为组合.(类似于树结构中的树),将组合下面没有其他元素相连的物件称为叶结点.其中,组合和叶结点有着共同的父类,可以将两者所有的方法抽象到父类中,并且对方法有默认的实现,这样如果叶结点或者组合不想实现某个方法的时候,就可以不实现方法.通过将菜单和项放在相同的结构中,我们创建了一个整体/部分的层次结构,即由菜单项和菜单组成的对象树.可以将它视为一个整体.任何一个菜单都可能是组

设计模式整理_策略模式

△策略模式用于在用户行为经常发生变化的情况下,将行为单独提取出来,定义算法族,采用组合的方式,分别封装起来,让他们可以互相替换,此模式,让算法的变化独立于使用算法的客户. 该模式体现了如下设计模式的原则: 封装变化. 多用组合,少用继承. 针对接口编程,而不针对实现编程. 在策略模式中,第一点体现了对于类中变化的部分,进行了封装,第二部分体现了将算法族的接口定义在类中,采用组合的形式来完成对于类行为的定义,第三部分体现了利用借口代表每个行为,而将接口的具体实现交给其实现类来完成.下面是代码示例,

设计模式整理_状态模式

状态模式允许对象在内部状态改变的时候,改变它的行为,对象看起来好像修改了它的类.因为这个模式将状态封装成为独立的类,并将动作委托到代表当前状态的对象,而行为会随着内部状态而改变. 在状态模式中,Context内部持有状态,State接口定义了一个所有具体状态的共同接口,任何状态都实现这个相同的接口,这样一来,各个状态可以互相替换.具体状态实现状态接口,所以当Context改变状态的时候,行为也跟着改变.而不管在什么时候,只要有人调用Context的具体方法,它就会用来委托状态处理,下面用具体事例

设计模式整理_模板模式

模板模式在父类中定义了一个方法的模板,而子类可以动态的实现模板成分方法,但是模板中的方法顺序无法改变. 父类中的模板方法往往申明为final,用来保证方法不被子类覆盖,因为作为模板,是不可以改变的,但是模板方法内的一系列方法,可以由子类自己静态实现,同时在父类的模板方法中,可以定义钩子(hook)方法.方便子类对于模板方法的优化.下面用两个例子说明. /*没有钩子(hook)的模板方法,此时模板方法无法修改*/ public abstract class Model { public final

设计模式整理_工厂模式

一.简单工厂模式. 通常情况下,在代码中需要创建一系列对象的时候,如果需要创建新的同类型的对象,就需要对原代码进行修改,此时就不符合对修改关闭的原则,因此,我们将创建对象于使用对象的代码分隔开来,在工厂类中创建工厂,然后如果需要新的对象,只需要修改工厂的类即可. public interface Car /*在这里定义需要生成的实例,针对抽象组件*/{ public void run(); } class BenzCar /*实例*/ implements Car { @Override pub

设计模式整理_迭代器模式

迭代器模式提供了一种方法顺序访问一个聚合对象中的各个元素,而又不是暴露其内部的表示.将在聚合对象内部游走的任务放在迭代器上而不是放在聚合上,这样简化了聚合的接口和实现,也让责任各得其所. 例如在没有进行优化的下列代码中,在处理不同的对象的聚合的时候,获取了对象的内部实现,这对封装造成了破坏,另外一方面,当需要处理其他类型的聚合对象的时候,也会造成需要对源代码进行修改,不利于扩展. /* * 定义Food类,Food类是需要被聚合的对象 * */ public class Food { priva

设计模式整理_装饰者模式

装饰者模式将责任附加在对象上,若要扩展功能,装饰者提供了比继承更加有弹性的替代方案. 采用装饰者模式的时候,需要注意以下几点: 装饰者和被装饰者对象,有相同的超类型.(继承是为了有正确的类型,而不是继承行为,行为来自于被装饰者和基础的组件). 可以用一个或多个装饰者包装一个对象. 装饰者可以在所委托被装饰者的行为前或者行为后,增加自己的行为. 如果代码是依赖于具体的组件类型而不是针对抽象组件类型编程的时候,就会导致程序出现问题.因此应该具体类型具体分析. 装饰者模式体现了对于扩展开放和对于修改关

设计模式整理_命令模式

命令模式将请求封装成对象,以便使用不同的请求,队列或者日志来参数化其他对象,命令模式也支持可撤销的操作.当需要将发出请求的对象和执行请求的对象解耦的时候,采用命令模式. 命令模式中有几个名词:调用者,命令,接受者,客户.客户负责创建命令和调用者,调用者将命令封装在自己里面,当客户需要执行某些操作的时候,调用者就将调用命令对象的方法,命令对象通知接受者执行操作.一个命令对象通过在特定的接受者上绑定一组动作来封装一个请求,调用者可以接受命令作为自己的参数,甚至在运行的时候动态的执行,命令可以支持撤销