5

ブリッジパターンを正しく理解していますか:

前:

  public class Main2 {
            @SuppressWarnings("unused")
            public static void main(String[] args) {
                Car car11 = new BadNativeCar();
                Car car12 = new GoodNativeCar();
                Car car21 = new BadForeignCar();
                Car car22 = new GoodForeignCar();
            }
        }

        interface Car{
            public void drive();
            public void stop();
        }

        class NativeCar implements Car{
            @Override
            public void drive() {
            }
            @Override
            public void stop() {
            }
        }

        class ForeignCar implements Car{
            @Override
            public void drive() {
            }
            @Override
            public void stop() {
            }
        }

        class GoodNativeCar extends NativeCar{
        }
        class BadNativeCar extends NativeCar{
        }
        class GoodForeignCar extends ForeignCar{
        }
        class BadForeignCar extends ForeignCar{
        }

後 (ブリッジ):

 public class Main2 {
        public static void main(String[] args) {
            BadCar badCar = new BadCar();
            GoodCar goodCar = new GoodCar();
            CarAbstraction car11 = new NativeCar(badCar);
            CarAbstraction car12 = new NativeCar(goodCar);
            CarAbstraction car21 = new ForeignCar(badCar);
            CarAbstraction car22 = new ForeignCar(goodCar);
        }
    }

    interface CarAbstraction{
        public void drive();
        public void stop();
    }

    //Abstraction
    abstract class CarAbstractionImpl implements CarAbstraction{
        private CarImplementor carImplementor;

        public CarAbstractionImpl(CarImplementor carImplementor) {
            this.carImplementor = carImplementor;
        }

        @Override
        public void drive() {
            carImplementor.drive();
        }
        @Override
        public void stop() {
            carImplementor.stop();
        }
    }

    //RefinedAbstraction1
    class NativeCar extends CarAbstractionImpl{
        public NativeCar(CarImplementor carImplementor) {
            super(carImplementor);
        }
    }
    //RefinedAbstraction2
    class ForeignCar extends CarAbstractionImpl{
        public ForeignCar(CarImplementor carImplementor) {
            super(carImplementor);
        }
    }



    //Implementor
    interface CarImplementor extends CarAbstraction{
    }

    //ConcreteImplementor1
    class GoodCar implements CarImplementor{
        @Override
        public void drive() {
        }
        @Override
        public void stop() {
        }
    }

    //ConcreteImplementor2
    class BadCar implements CarImplementor{
        @Override
        public void drive() {
        }
        @Override
        public void stop() {
        }
    }
4

2 に答える 2

2

あなたの質問から、次のクラス図を取得しました。

前:

                    ________Car_________
                    /                    \
               NativeCar              ForeignCar
               /       \              /        \
   GoodNativeCar   BadNativeCar GoodForeignCar  BadForeignCar

後:

            CarAbstraction
                 |
         CarAbstractionImpl-------------HAS-A-------> CarImplementor
          /             \                              /          \
     NativeCar       ForeignCar                    GoodCar       BadCar

http://www.oodesign.com/bridge-pattern.htmlのブリッジパターンのクラス図を見ると、ブリッジパターンのようです。ただし、クラス階層 CarAbstraction --CarAbstractionImpl は省略可能です。CarAbstraction に CarImplementor があり、NativeCar と ForeignCar が CarAbstraction に継承されることを意味します。

というわけで、クラス図からはブリッジパターンのように見えます。

しかし、概念的な点についてはどうでしょうか。NativeCar と ForeignCar は抽象化されていますか、それとも実装としても使用できますか? GoodCar や BadCar と交換できますか? この事実も考慮が必要です。NativeCar と ForeignCar が抽象化されていて、GoodCar と BadCar が実装されている場合、この状況ではこのブリッジ パターンが使用されます。

于 2012-12-20T05:09:51.460 に答える
0

私が理解しているように、あなたは次のようなことをしようとしています:

 When:

        A
     /     \
    Aa      Ab
   / \     /  \
 Aa1 Aa2  Ab1 Ab2

Refactor to:

     A         N
  /     \     / \
Aa(N) Ab(N)  1   2

(ここから入手:ブリッジパターンはいつ使用しますか?アダプターパターンとどう違うのですか?

私はブリッジ パターンにあまり詳しくありませんが、正しく見えます。

于 2012-05-23T08:24:43.003 に答える