STUDY/Design Pattern

브릿지 패턴(Bridge Pattern)

디리릭 2022. 11. 27. 21:04
728x90

브릿지 패턴은 추상층과 구현부를 분리하여 결합도를 낮추는 패턴이다.

추상층과 구현부가 분리되었기 때문에 각각에 대해 확장성이 용이하다.

구조

▷ Abstraction: 추상인터페이스를 정의한다. Implementor에 대한 인스턴스를 가지고 이를 통해 구현부의 메소드를 호출한다.

▷ RefindedAbstraction: 추상부를 확장한 클래스이다.

▷ Implementor: 구현부에 대한 인터페이스를 정의한다.

▷ ConcreteImplementor: Implementor에 대한 실제 구현을 한다.

구현

 public abstract class Shape
    {
        private Drawing drawing;

        protected Shape(Drawing drawing) 
        {
            this.drawing = drawing;
        }

        public abstract void draw();
        public void drawSolid(int dp) 
        {
            drawing.drawSolid(dp);
        }
        public void fill() 
        {
            drawing.fill();
        }

        public void color(int color) 
        {
            drawing.color(color);
        }
    }
  public interface Drawing
    {
        void drawSolid(int dp);
        void fill();
        void color(int color);
    }
 class Retangle : Shape
    {
        public Retangle(Drawing drawing) : base(drawing)
        {
        }

        public override void draw()
        {
            Console.WriteLine("Rect draw extend");
        }
    }
   class Circle : Shape
    {
        public Circle(Drawing drawing) : base(drawing)
        {
        }

        public override void draw()
        {
            Console.WriteLine("Circle draw extend");
        }
    }
class RectDrawing : Drawing
    {
        public void color(int color)
        {
            Console.WriteLine($"Rectangle change color to {color}");
        }

        public void drawSolid(int dp)
        {
            Console.WriteLine($"draw Rectangle solid in {dp} thickness");
        }

        public void fill()
        {
            Console.WriteLine($"FILL RECT");
        }
    }
    class CircleDrawing : Drawing
    {
        public void color(int color)
        {
            Console.WriteLine($"Circle change color to {color}");
        }

        public void drawSolid(int dp)
        {
            Console.WriteLine($"draw Circle solid in {dp} thickness");
        }

        public void fill()
        {
            Console.WriteLine($"FILL CIRCLE");
        }
    }
    static void Main(string[] args)
        {
            Shape retangle = new Retangle(new RectDrawing());
            Shape circle = new Circle(new CircleDrawing());


            Console.WriteLine("==LET'S DRAW RECT==");
            retangle.drawSolid(3);
            retangle.fill();
            retangle.color(11111);
            retangle.draw();
            Console.WriteLine("==LET'S DRAW CIRCLE==");
            circle.drawSolid(3);
            circle.fill();
            circle.color(11111);
            circle.draw();
            Console.ReadLine();
        }

 

 

728x90

'STUDY > Design Pattern' 카테고리의 다른 글

장식자 패턴(Decorator Pattern)  (0) 2022.12.15
복합체 패턴(Composite Pattern)  (0) 2022.11.27
어댑터 패턴 (Adapter pattern)  (0) 2022.11.27
단일체 패턴(Singleton Pattern)  (0) 2022.11.27
원형 패턴 (Prototype Pattern)  (0) 2022.11.27