Bridgeパターンのサンプルコードです。
package org.example.bridge;
public abstract class Implementor {
public abstract void implMethodX();
public abstract void implMethodY();
}
package org.example.bridge;
public class concreteImplementorA extends Implementor{
@Override
public void implMethodX() {
}
@Override
public void implMethodY() {
}
}
package org.example.bridge;
public class concreteImplementorB extends Implementor{
@Override
public void implMethodX() {
}
@Override
public void implMethodY() {
}
}
package org.example.bridge;
public class Abstraction {
Implementor implementor;
public Abstraction(Implementor implementor)
{
this.implementor = implementor;
}
public void method1()
{
}
public void method2()
{
}
}
package org.example.bridge;
public class RefileAbstraction extends Abstraction{
public RefileAbstraction(Implementor implementor) {
super(implementor);
}
@Override
public void method1()
{
}
@Override
public void method2()
{
}
public void refineMethodA()
{
}
public void refineMethodB()
{
}
}
package org.example.bridge;
public class Main {
public static void main(String[] args)
{
RefileAbstraction refileAbstraction1 = new RefileAbstraction(new concreteImplementorA());
refileAbstraction1.method1();
refileAbstraction1.method2();
refileAbstraction1.refineMethodA();
refileAbstraction1.refineMethodB();
RefileAbstraction refileAbstraction2 = new RefileAbstraction(new concreteImplementorB());
refileAbstraction2.method1();
refileAbstraction2.method2();
refileAbstraction2.refineMethodA();
refileAbstraction2.refineMethodB();
}
}
Bridgeパターンは、処理を機能(Abstraction)と実装(Implementor)に分けてコーディングするパターンです。
処理を拡張する場合はImplementorを継承してconcreteImplementorクラスを作成、機能側にそのインスタンスを渡すイメージです。