среда, 1 августа 2012 г.

pattern: Adapter

    Назначение
    Преобразует интерфейс класса в некоторый другой интерфейс, ожидаемый клиентами. Обеспечивает совместную работу классов, которая была бы невозможна без данного паттерна из-за несовместимости интерфейсов. 

    Использование шаблона в JDK
(примеры частично взяты с этого ресурса)

               java.io.InputStreamReader(InputStream)(адаптирует InputStream к Reader)
                java.io.OutputStreamWriter(OutputStream)(адаптирует OutputStream к Writer)
                java.io.DataInputStream(InputStream)(адаптирует InputStream к DataInput)
                java.io.DataOutputStream(OutputStream) (адаптирует OutputStream к DataOutput)
                java.io.ByteArrayInputStream(byte[]) (адаптирует byte[] к InputStream)
                java.io.ByteArrayOutputStream#toByteArray() (адаптирует byte[] к OutputStream)
                java.io.CharArrayReader(char[]) (адаптирует char[] к Reader)
                java.io.CharArrayWriter#toCharArray() (адаптирует char[] к Writer)
                java.io.StringReader(String) (адаптирует String к Reader)
                java.io.StringWriter#toString() (адаптирует String к Writer)
                java.io.FileInputStream(File) (адаптирует File к InputStream)
                java.io.FileOutputStream(File) (адаптирует File к OutputStream)
                java.io.FileReader(File) (адаптирует File к Reader)
                java.io.FileWriter(File) (адаптирует File к Writer)
                java.io.ObjectInputStream(InputStream) (адаптирует InputStream к ObjectInput)
                java.io.ObjectOutputStream(OutputStream) (адаптирует OutputStream к ObjectOutput)
               java.util.Collections#enumeration(Collection) (адаптирует Collection к Enumeration)
                java.util.Collections#list(Enumeration) (адаптирует Enumeration к ArrayList)
                java.util.Collections#asLifoQueue(Deque) (адаптирует Deque к Queue)


    Фактически, JDBC Driver является адаптером, который преобразует запросы от Java-программы в протокол, понятный БД.

    JDBC-ODBC Bridge driver sun.jdbc.odbc.JdbcOdbcDrive (Type 1 driver) является адаптером JDBC к ODBC.

----------------------------------------------------------------

-----------------Java I/O: Adapter/Decorator----------------

import java.io.*;
import java.util.zip.GZIPOutputStream;

public class AdapterDecoratorTest {
    public static void main(String[] args) throws IOException {
        Writer writer = new OutputStreamWriter(
                new GZIPOutputStream(
                        new BufferedOutputStream(
                                new FileOutputStream(
                                        new File("d:/tmp/tmp.zip")),1024)), "UTF8");
        //
        writer.write("Hello Adapter/Decorator!");
        writer.flush();
        writer.close();
    }

    public static void main2(String[] args) throws IOException {
        //
        File file = new File("d:/tmp/tmp.zip");
        OutputStream fileOS = new FileOutputStream(file);
        OutputStream bufferedOS = new BufferedOutputStream(fileOS, 1024);
        OutputStream gzipOS = new GZIPOutputStream(bufferedOS);
        Writer writer = new OutputStreamWriter(gzipOS, "UTF8");
        //
        writer.write("Hello Adapter/Decorator!");
        writer.flush();
        writer.close();
    }
}