DESIGN PATTERN/실용주의 디자인패턴

Chapter 4 - Bridge Pattern

파란실버라이트 2013. 1. 4. 12:51

  Gridge Pattern

  • Bridge는 인터페이스를 통해 서브시스템을 격리 시킨다. 이는 한 서브시스템의 변화가 다른 서브시스템에 영향을 미치는 것을 막아준다.
  • Facade 패턴의 주요 목적은 '단순화'이며 , 서브시스템을 격리시키지는 않는다.

 

 

 

 

 

1. Peer Class들은 java.awt.Toolkit라는 Abstract Factory를 사용하여 런타임에 생성된다.

2. Java.awt.Window 클래슨 Toolkit과 Peer에 대해서 알고 있다. Window를 생성할 때 window 객체를 적절한 peer를 생성하게 된다.

    Window의 객체의 관점에서 프로그래밍 한다면 어떠한 Peer가 있는지에 대해서 전혀 알필요가 없다.

=> 결과적으로 브리짓의 다른 측면에 있는 것들(모든 Peer)은 심지어 런타임에도 바뀔 수 있으며, 이러한 변화는 브리지의 다른 쪽에는  영향을 미치지 않는다. 마찬가지로 , 피어 구현 중 어떤 것도 자신이 어떻게 사용되고 있는지에 대해 알지 못한다.

 

  • Bridge 패턴Abstract Factory 패턴과 함께 사용되는 경우가 많다
  • Bridge 패턴은 변화할 수 있는 서브시스템 인터페이스를 통해 분리시켜 주며, Abstract Factory는 변화는 서브시스템 중 하나를 생성할 수 있도록 해준다.
  •  

     

     

     

    public final class Database
    {

    public Database() { }

    public Database( File path, Table[] database ) throws IOException
    { useDatabase( path );
    for( int i = 0; i < database.length; ++i )
    tables.put( database[i].name(), database[i] );
    }


    public void createTable( String name, List columns )
    {

    String[] columnNames = new String[ columns.size() ];
    int i = 0;
    for( Iterator names = columns.iterator(); names.hasNext(); )
    columnNames[i++] = (String) names.next();

     

    Table newTable = TableFactory.create(name, columnNames);


    tables.put( name, newTable );
    }


    public void dropTable( String name )
    { tables.remove( name ); // ignore the error if there is one.

    File tableFile = new File(location,name);
    if( tableFile.exists() )
    tableFile.delete();
    }
    }

     

     Database와 Table은 Bridge를 구성한다. Table 인터페이스는 다양한 Table 구현체를 은닉시켜 준다.

     그리고 TableFactory는 다양한 Table 구현체 중 하나를 선택하여 사용할 수 있도록 해준다.

     Database 관점에서 보면 데이타 저장 서브시스템(Table 측)의 변화가 Table 인터페이스를 통해서 은닉된다.