반응형











Circle같은게 추가될 수 있으니, Shape를 추가
기존의 디자인을 확장함




클래스 개수가 어마어마하게 늘어나게 된다.

굳이 같이 있어야 하나? 나눠보자!






1이면,
Information이 있는 곳에서 해라 규칙 위반
Encapsulation 위반







그릴때 V1Drawing, V2Drawing 갖다쓰겠다는 이야기인덧
어떻게 쓸지는 Ractangle, Circle이 스스로 알고 있음.
Class Client {
Shape r1, r2;
Drawing dp;
dp = new V1Drawing();
r1 = new Ractangle(dp, 1, 1, 2, 2);
dp = new V2Drawing();
r2 = new Circle(dp, 2,2,3);
r1.draw();
r2.draw();
}
abstract Class Shape {
abstract public void draw();
private Drawing dp;
public Shape(Drawing dp) {
this.dp = dp;
}
public void drawLine(double x1, double y1, double x2, double y2) {
dp.drawLine(x1,y1,x2,y2);
}
public void drawCircle(double x, double y, double r) {
dp.drawCircle(x,y,r);
}
}
Class Rectangle extends Shape {
private int _x1, _x2, _y1, _y2;
public Rectangle(Drawing dp, double x1, double y1, double x2, double y2) {
super(dp);
_x1 = x1;
_x2 = x2;
_y1 = y1;
_y2 = y2;
}
public void draw() {
drawLine(_x1, _y1, _x2, _y1);
drawLine(_x2, _y1, _x2, _y2);
drawLine(_x2, _y2, _x1, _y2);
drawLine(_x1, _y2, _x1, _y1);
}
}
Class Circle extends Shape {
private int _x, _y, _r;
public Circle(Drawing dp, double x, double y, double r) {
super(dp);
_x = x;
_y = y;
_r = r;
}
public void draw() {
drawLine(_x, _y, _r);
}
}
abstract Class Drawing {
abstract public void drawLine(double x1, double y1, double x2, double y2);
abstract public void drawCircle(double x, double y, double r);
}
Class V1Drawing extends Drawing {
public void drawLine(double x1, double y1, double x2, double y2) {
DP1.draw_a_line(x1,y1,x1,y2);
}
public void drawCircle(double x, double y, double r) {
DP1.draw_a_circle(x,y,r);
}
}
Class V2Drawing extends Drawing {
public void drawLine(double x1, double y1, double x2, double y2) {
DP2.drawLine(x1,y1,x1,y2);
}
public void drawCircle(double x, double y, double r) {
DP2.drawCircle(x,y,r);
}
}
Class DP1 {
public void draw_a_line(double x1, double y1, double x2, double y2) {
// 버전1 선긋기
}
public void draw_a_circle(double x, double y, double r) {
// 버전1 원그리기
}
}
Class DP2 {
public void drawLine(double x1, double y1, double x2, double y2) {
// 버전2 선긋기
}
public void drawCircle(double x, double y, double r) {
// 버전2 원그리기
}
}



- 어댑터는 이미 연결불가능한 좆망 디자인을 사후에 연결해주는 것
- 브릿지는 디자인으로 미리 나눠주는 것



반응형
'Design Architecture > Design Pattern' 카테고리의 다른 글
Design Pattern 정리 블로그 (0) | 2021.08.31 |
---|---|
18강 MVC PATTERN (0) | 2021.08.30 |
16강 Composite (0) | 2021.08.29 |
15강 Adapter (0) | 2021.08.29 |
14강 Decorator (0) | 2021.08.29 |