Step 1
MyMain
public class MyMain {
public static void main(String args[]) {
MyClass myClass = new MyClassA1B1();
System.out.println(myClass.getName());
System.out.println(myClass.getAge());
System.out.println(myClass.getAddress());
System.out.println(myClass.getFloor());
System.out.println();
myClass = new MyClassA1B2();
System.out.println(myClass.getName());
System.out.println(myClass.getAge());
System.out.println(myClass.getAddress());
System.out.println(myClass.getFloor());
System.out.println();
myClass = new MyClassA2B1();
System.out.println(myClass.getName());
System.out.println(myClass.getAge());
System.out.println(myClass.getAddress());
System.out.println(myClass.getFloor());
System.out.println();
myClass = new MyClassA2B2();
System.out.println(myClass.getName());
System.out.println(myClass.getAge());
System.out.println(myClass.getAddress());
System.out.println(myClass.getFloor());
System.out.println();
}
}
MyClass
public abstract class MyClass {
public abstract String getName();
public abstract int getAge();
public abstract String getAddress();
public abstract int getFloor();
}
MyClassA1B1
public class MyClassA1B1 extends MyClass {
public String getName() {
return "Suzuki";
}
public int getAge() {
return 20;
}
public String getAddress() {
return "Tokyo";
}
public int getFloor() {
return 2;
}
}
MyClassA1B2
public class MyClassA1B2 extends MyClass {
public String getName() {
return "Suzuki";
}
public int getAge() {
return 20;
}
public String getAddress() {
return "Yokohama";
}
public int getFloor() {
return 3;
}
}
MyClassA2B1
public class MyClassA2B1 extends MyClass {
public String getName() {
return "Tanaka";
}
public int getAge() {
return 30;
}
public String getAddress() {
return "Tokyo";
}
public int getFloor() {
return 2;
}
}
MyClassA2B2
public class MyClassA2B2 extends MyClass {
public String getName() {
return "Tanaka";
}
public int getAge() {
return 30;
}
public String getAddress() {
return "Yokohama";
}
public int getFloor() {
return 3;
}
}
実行結果
L:\>java MyMain
Suzuki
20
Tokyo
2
Suzuki
20
Yokohama
3
Tanaka
30
Tokyo
2
Tanaka
30
Yokohama
3
Step 2 「Bridge パターン」
MyMain
public class MyMain {
public static void main(String args[]) {
MyClassA classA = new MyClassA1();
classA.setClassB(new MyClassB1());
System.out.println(classA.getName());
System.out.println(classA.getAge());
System.out.println(classA.getAddress());
System.out.println(classA.getFloor());
System.out.println();
classA.setClassB(new MyClassB2());
System.out.println(classA.getName());
System.out.println(classA.getAge());
System.out.println(classA.getAddress());
System.out.println(classA.getFloor());
System.out.println();
classA = new MyClassA2();
classA.setClassB(new MyClassB1());
System.out.println(classA.getName());
System.out.println(classA.getAge());
System.out.println(classA.getAddress());
System.out.println(classA.getFloor());
System.out.println();
classA.setClassB(new MyClassB2());
System.out.println(classA.getName());
System.out.println(classA.getAge());
System.out.println(classA.getAddress());
System.out.println(classA.getFloor());
System.out.println();
}
}
MyClassA
public abstract class MyClassA {
public abstract String getName();
public abstract int getAge();
private MyClassB classB;
public void setClassB(MyClassB instance) {
classB = instance;
}
public String getAddress() {
return classB.getAddress();
}
public int getFloor() {
return classB.getFloor();
}
}
MyClassB
public abstract class MyClassB {
public abstract String getAddress();
public abstract int getFloor();
}
MyClassA1
public class MyClassA1 extends MyClassA {
public String getName() {
return "Suzuki";
}
public int getAge() {
return 20;
}
}
MyClassA2
public class MyClassA2 extends MyClassA {
public String getName() {
return "Tanaka";
}
public int getAge() {
return 30;
}
}
MyClassB1
public class MyClassB1 extends MyClassB {
public String getAddress() {
return "Tokyo";
}
public int getFloor() {
return 2;
}
}
MyClassB2
public class MyClassB2 extends MyClassB {
public String getAddress() {
return "Yokohama";
}
public int getFloor() {
return 3;
}
}
実行結果
L:\>java MyMain
Suzuki
20
Tokyo
2
Suzuki
20
Yokohama
3
Tanaka
30
Tokyo
2
Tanaka
30
Yokohama
3