home > デザインパターン >

ForNext

Only Do What Only You Can Do

Adapter

VBScript

JScript

Perl

PHP

Python

Ruby

PowerShell

Scala

F#

C

C++

C++Builder

VC++

C#

Java

更新日 : 2010.11.24
■ MyClassB
public class MyClassB {
    private String date;

    public MyClassB(String date) {
        this.date = date;
    }

    public String getDate() {
        return date;
    }
}
■ MyDateViewer
public class MyDateViewer {
    public void viewDate(MyClassB classB) {
        System.out.println(classB.getDate());
    }
}
■ MyClassA
// MyClassB と似た機能を持っているが、インターフェースが違うので
// MyDateViewer から利用できない
public class MyClassA {
    private String year;
    private String month;
    private String day;

    public MyClassA(String year, String month, String day) {
        this.year  = year;
        this.month = month;
        this.day   = day;
    }

    public String getYear() {
        return year;
    }
    public String getMonth() {
        return month;
    }
    public String getDay() {
        return day;
    }
}
■ MyAdapter
// MyClassB と MyClassA との インターフェースの違いを
// 吸収するクラス
public class MyAdapter extends MyClassB {
    MyClassA classA;

    public MyAdapter(MyClassA classA) {
        // MyClassB のコンストラクタをダミーで呼ぶ
        super(null);

        this.classA = classA;
    }

    public String getDate() {
        String date = "";
        date += classA.getYear();
        date += "/";
        date += classA.getMonth();
        date += "/";
        date += classA.getDay();

        return date;
    }
}
■ MyMain
public class MyMain {
    public static void main(String args[]) {
        MyClassA classA  = new MyClassA("2000", "01", "01");
        MyClassB adapter = new MyAdapter(classA);

        MyClassB classB  = new MyClassB("1999/12/31");

        // 同じインターフェースで使用できる
        MyDateViewer viewer = new MyDateViewer();
        viewer.viewDate(adapter);
        viewer.viewDate(classB);
    }
}
L:\>java MyMain
2000/01/01
1999/12/31

Objective-C

D

VB

VB.NET

Delphi

Ada

PL/SQL

T-SQL

関数型

inserted by FC2 system