Bridge 브리지 모드

3825 단어 브리지 모드
Gof의 책에서 브릿지 모델은 추상과 행동을 분리해 각각 독립적이지만 동적으로 결합할 수 있도록 하는 것이 목적이라고 지적했다.
어떤 사물의 대상도 추상적이고 행위의 구분이 있다. 예를 들어 사람, 사람은 추상적이고 사람은 남자와 여자로 나뉜다.사람의 행위, 행위도 여러 가지 구체적인 표현이 있기 때문에'사람'과'사람의 행위'라는 두 개념도 추상과 행위의 구분을 반영했다.
대상을 대상으로 디자인하는 개념의 종류에서 대상이라는 개념은 실제적으로 속성과 습관 어느 두 부분으로 구성된 것이다. 속성은 우리는 일종의 정태적이고 추상적이라고 볼 수 있다. 절반의 경우 행위는 하나의 대상에 포함되지만 어떤 상황에서 행위는 하나의 대상종에 포함된다. 그러나 어떤 상황에서 우리는 이런 행위도 분류하여 하나의 전체적인 행위 인터페이스를 형성해야 한다.이것이 바로 다리 모델의 용도다.
왜 사용합니까?
추상적인 부분과 행위가 고정된 귀속 관계를 원하지 않고 동태적으로 연결될 수 있어야 한다.하나의 추상 클래스와 인터페이스에 여러 개의 구체적인 실현이 있다면 이러한 하위 클래스 간의 관계는 다음과 같은 두 가지가 있을 수 있다.
1. 이 여러 개의 자류 간의 개념은 병렬된 것이다. 예를 들어 앞에서 예를 들어 말뚝을 박는 데는 두 가지 구체적인 종류가 있는데 그것이 바로 사각형 말뚝과 정원 말뚝이다. 이 두 가지 형태의 말뚝은 병렬된 것이고 개념적인 중복이 없다.
2. 이 여러 개의 자류는 내용 개념이 중첩되어 있기 때문에 우리는 추상적인 공통 부분과 행위의 공통 부분을 각각 독립시켜야 한다. 원래는 하나의 인터페이스에 놓으려고 했는데 지금은 두 개의 인터페이스를 설계해야 한다. 추상적인 인터페이스와 행위 인터페이스를 각각 추상과 행위를 놓아야 한다.
예를 들어 커피 한 잔을 예로 들면 자류의 실현류는 네 가지이다. 중잔에 우유를 넣고, 큰 잔에 우유를 넣고, 중잔에 우유를 넣지 않으며, 큰 잔에 우유를 넣지 않는다.그러나 우리는 상기 네 가지 자류 중 개념의 중첩이 있고 다른 측면에서 고려할 수 있다. 이 네 가지 유형은 실제적으로 두 가지 역할의 조합이다. 추상과 행위인데 그 중에서 추상은 중잔과 큰 잔이다.행위: 젖을 넣다
네 가지 자류가 추상과 행위 사이에 고정된 귀속 관계를 실현했다. 만약에 이후에 동태적으로 포도즙을 증가하는 행위를 실현한다면 반드시 두 가지 종류를 더 늘려야 한다. 중간 컵에 포도즙을 넣고 큰 컵에 포도즙을 넣어야 한다.분명히 혼란스럽고 확장성이 떨어진다.
그러면 우리는 추상과 행동을 분리하는 차원에서 Bridge 모드를 사용해서 실현한다.
어떻게 실현합니까?
우리는 추상과 행위를 분리하고, 젖을 넣는 것과 넣지 않는 것은 행위에 속하며, 그것들을 전문적인 행위 인터페이스로 추상화해야 한다.
추상 부분 인터페이스 코드
public abstract class Coffee
{
    CoffeeImp coffeeImp;

    public void setCoffeeImp()
    {
        this.coffeeImp = CoffeeImpSingleton.getTheCoffeeImp();
    }

    public CoffeeImp getCoffeeImp()
    {
        return coffeeImp;
    }

    public static void pourCoffee();
}

그 중에서 커피임프는 우유를 넣고 넣지 않는 행위 인터페이스이다.
public abstract class CoffeeImp
{
    public abstract void pourCoffeeImp();
}

현재 우리는 두 개의 추상류가 생겼는데, 다음은 우리가 각각 그것을 계승할 것이다
public class MediumCoffee extends Coffee
{
    public MediumCoffee()
    {
         setCoffeeImp();
    }

    public void pourCoffee()
    {
        CoffeeImp coffeeImp  = this.getCoffeeImp();

        for(int i = 0; i < 2;i++)
        {
            coffeeImp.pourCoffeeImp();
        }
    }
}

public class SuperSizeCoffee extends Coffee
{
    public MediumCoffee()
    {
         setCoffeeImp();
    }

    public void pourCoffee()
    {
        CoffeeImp coffeeImp  = this.getCoffeeImp();

        for(int i = 0; i < 5;i++)
        {
            coffeeImp.pourCoffeeImp();
        }
    }
}

다음은 특정 동작에 대한 CoffeeImp 상속입니다.
public class MilkCoffeeImp extends CoffeeImp
{
    MilkCoffeeImp()
    {
    }

    public void pourCoffeeImp()
    {
        System.out.println(" ");
    }
}

public class FragrantCoffeeImp extends CoffeeImp
{
    public FragrantCoffeeImp()
    {
    }

    public void pourCoffeeImp()
    {
        System.out.println(" , ");
    }
}

어떻게 동적 결합이 되는지 봅시다. 사용하기 전에 우리는 준비 작업을 하고 현재 커피Imp에 사용할 단일 클래스(Singleton)를 설계합니다.
public class CoffeeImpSingleton
{
      private static CoffeeImp coffeeImp;

   public CoffeeImpSingleton(CoffeeImp coffeeImpIn)
   {
            this.coffeeImp = coffeeImpIn;
       }

   public static CoffeeImp getTheCoffeeImp()
   {
     return coffeeImp;
   }
}

중간 컵에 우유를 넣는 것과 큰 컵에 우유를 넣는 것이 어떻게 나오는지 보자.
// 
CoffeeImpSingleton coffeeImpSingleton = new CoffeeImpSingleton(new            MilkCoffeeImp());

// 
MediumCoffee mediumCoffee = new MediumCoffee(coffeeImpSingleton );
mediumCoffee.pourCoffee();

// 
SuperSizeCoffee superSizeCoffee = new SuperSizeCoffee(coffeeImpSingleton );
superSizeCoffee.pourCoffee();

참고: Bridge 모드의 실행 클래스인 커피임프와 커피는 일대일 관계이기 때문에 커피임프를 정확하게 만드는 것이 이 모드의 관건이다.

좋은 웹페이지 즐겨찾기