軟件工程:實(shí)例化適配器(Adapter)模式

字號(hào):

結(jié)構(gòu)模式:描述如何將類或者對(duì)象組合在一起形成更大的結(jié)構(gòu)。
    適配器模式:把一個(gè)類的接口變換成客戶端所期待的另一種接口,從而使原本因接口不匹配而無(wú)法在一起工作的兩個(gè)類能夠在一起工作。
    使用場(chǎng)合:
    1)系統(tǒng)需要使用現(xiàn)有的類,而此類的接口不符合系統(tǒng)的需要。
    2)想要建立一個(gè)可以重復(fù)使用的類,用于與一些彼此之間沒(méi)有太大關(guān)聯(lián)的一些類,包括一些可能在將來(lái)引進(jìn)的類一起工作。這些源類不一定有很復(fù)雜的接口。
    3)(對(duì)對(duì)象的適配器模式而言)在設(shè)計(jì)里,需要改變多個(gè)已有的子類的接口,如果使用類的適配器模式,就要針對(duì)每一個(gè)子類做一個(gè)適配器類,而這不太實(shí)際。
    類/對(duì)象的適配器模式:
    1. com.cleversoft.designpatterns.adapter.Target.java:
    package com.cleversoft.designpatterns.adapter;
    public interface Target {
    public void request();
    }
    2. com.cleversoft.designpatterns.adapter.Adaptee.java:
    package com.cleversoft.designpatterns.adapter;
    public class Adaptee {
    public void specificRequest() {
    System.out.println("Adaptee: SpecificRequest");
    }
    }
    3. com.cleversoft.designpatterns.adapter.ClassAdapter.java:
    package com.cleversoft.designpatterns.adapter;
    public class ClassAdapter extends Adaptee implements Target {
    public void request() {
    specificRequest();
    }
    }
    4. com.cleversoft.designpatterns.adapter.ObjectAdapter.java:
    package com.cleversoft.designpatterns.adapter;
    public class ObjectAdapter implements Target {
    private Adaptee adaptee;
    public ObjectAdapter(Adaptee adaptee) {
    this.adaptee = adaptee;
    }
    public void request() {
    adaptee.specificRequest();
    }
    }
    5. com.cleversoft.designpatterns.adapter.Client.java:
    package com.cleversoft.designpatterns.adapter;
    public class Client {
    public static void main(String[] args) {
    System.out.println("Object Adapter");
    Adaptee adaptee = new Adaptee();
    ObjectAdapter objectAdapter = new ObjectAdapter(adaptee);
    objectAdapter.request();
    System.out.println("Class Adapter");
    ClassAdapter classAdapter = new ClassAdapter();
    classAdapter.request();
    }
    }