Инструменты пользователя

Инструменты сайта


pattern_bridge

Назад

Паттерн Мост позволяет изменять реализацию и абстракцию, для чего они размещаются в двух разных иерархиях классов.

Задача Паттерна Мост — разделить интерфейс класса и его реализацию так, чтобы можно было заменить или даже удалить реализацию класса без ущерба для кода приложения.

Преимущества Моста

  • Логическое отделение реализации от интерфейса.
  • Абстракция и реализация могут расширяться независимо друг от друга.
  • Изменения в конкретных классах абстракции не отражаются на стороне клиента.

Область применения и недостатки

  • Используется в графических и оконных системах, которые должны работать на разных платформах.
  • Полезен в ситуациях возможностью независимого изменения интерфейса и реализации.
  • Повышает сложность.

TV
public interface TV
{
    public void on();
    public void off();
    public void tuneChannel(int channel);    
}
 
 
class Sony implements TV
{
    public void on()
    {
        //Sony specific on
        System.out.println("Включаем телевизор Sony");
    }
 
    public void off()
    {
        //Sony specific off
        System.out.println("Выключаем телевизор Sony");
    }
 
    public void tuneChannel(int channel)
    {
        //Sony specific tuneChannel
        System.out.println("Кнал:"+channel);
    }
}
 
 
class Philips implements TV
{
    public void on()
    {
        //Philips specific on
        System.out.println("Включаем телевизор Philips");
    }
 
    public void off()
    {
        //Philips specific off
        System.out.println("Выключаем телевизор Sony");
    }
 
    public void tuneChannel(int channel)
    {
        //Philips specific tuneChannel
        System.out.println("Кнал:"+channel);
    }
}
RemoteControl
public abstract class RemoteControl
{
   private TV tv; 
 
   public void setTV(TV tv)
   {
       this.tv = tv;
   }
 
   public void on()
   {
      tv.on();
   }
 
   public void off()
   {
      tv.off();
   }
 
   public void setChannel(int channel)
   {
       tv.tuneChannel(channel);
   }
}
 
class ConcreteRemote extends RemoteControl
{
   private int channel; 
 
   public ConcreteRemote(TV tv)
   {
       setTV(tv);
   }
 
   public void nextChannel()
   {
       channel++;
	   setChannel(channel);
   }
 
   public void prevChannel()
   {
       channel--;
	   setChannel(channel);
   }
 
}
main
public class Main
{
    public static void main(String[] args)
    {
        ConcreteRemote cr = new ConcreteRemote(new Sony());
        cr.on();
        cr.nextChannel();
 
        cr = new ConcreteRemote(new Philips());
        cr.on();
    }
}
 
/*
    Включаем телевизор Sony
    Кнал:1
    Включаем телевизор Philips
*/