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 |