Skip to content

Commit 6fc43e3

Browse files
committed
设计模式-桥接模式,模板方法模式
1 parent e26217f commit 6fc43e3

File tree

13 files changed

+263
-0
lines changed

13 files changed

+263
-0
lines changed
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.design.bridge;
2+
3+
/**
4+
* 黑色
5+
*
6+
* @author wliduo[i@dolyw.com]
7+
* @date 2023/2/2 17:05
8+
*/
9+
public class BlackColorImpl implements Color {
10+
@Override
11+
public void bepaint(String shape) {
12+
System.out.println("黑色的" + shape);
13+
}
14+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.design.bridge;
2+
3+
/**
4+
* 圆形
5+
*
6+
* @author wliduo[i@dolyw.com]
7+
* @date 2023/2/2 17:05
8+
*/
9+
public class CircleShapeImpl extends Shape {
10+
@Override
11+
public void draw() {
12+
color.bepaint("圆形");
13+
}
14+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.design.bridge;
2+
3+
/**
4+
* 颜色接口
5+
*
6+
* @author wliduo[i@dolyw.com]
7+
* @date 2023/2/2 17:05
8+
*/
9+
public interface Color {
10+
11+
void bepaint(String shape);
12+
13+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.design.bridge;
2+
3+
/**
4+
* 灰色
5+
*
6+
* @author wliduo[i@dolyw.com]
7+
* @date 2023/2/2 17:05
8+
*/
9+
public class GrayColorImpl implements Color {
10+
@Override
11+
public void bepaint(String shape) {
12+
System.out.println("灰色的" + shape);
13+
}
14+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package com.design.bridge;
2+
3+
/**
4+
* 桥接模式 - 在有多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活
5+
* 使用一个画不同颜色的形状的小例子说明,比如可以画正方形、长方形、圆形
6+
* 但是现在我们需要给这些形状进行上色,这里有三种颜色:白色、灰色、黑色
7+
* 这里我们可以画出 3 * 3 = 9 种图形,一般直接的做法是使用继承,
8+
* 为每种形状都提供各种颜色的版本,这样的做法不灵活,
9+
* 会导致实现类几何增长,所以引出了桥接模式,根据实际需要对颜色和形状进行组合
10+
*
11+
* @author wliduo[i@dolyw.com]
12+
* @date 2023/2/2 17:05
13+
*/
14+
public class Main {
15+
16+
public static void main(String[] args) {
17+
// 颜色
18+
Color whiteColor = new WhiteColorImpl();
19+
Color blackColor = new BlackColorImpl();
20+
Color grayColor = new GrayColorImpl();
21+
// 形状
22+
Shape square = new SquareShapeImpl();
23+
Shape rectangleShape = new RectangleShapeImpl();
24+
Shape circleShape = new CircleShapeImpl();
25+
// 白色的正方形
26+
square.setColor(whiteColor);
27+
square.draw();
28+
// 灰色的正方形
29+
square.setColor(grayColor);
30+
square.draw();
31+
// 黑色的长方形
32+
rectangleShape.setColor(blackColor);
33+
rectangleShape.draw();
34+
// 灰色的圆形
35+
circleShape.setColor(grayColor);
36+
circleShape.draw();
37+
// 白色的圆形
38+
circleShape.setColor(whiteColor);
39+
circleShape.draw();
40+
}
41+
42+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.design.bridge;
2+
3+
/**
4+
* 长方形
5+
*
6+
* @author wliduo[i@dolyw.com]
7+
* @date 2023/2/2 17:05
8+
*/
9+
public class RectangleShapeImpl extends Shape {
10+
@Override
11+
public void draw() {
12+
color.bepaint("长方形");
13+
}
14+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.design.bridge;
2+
3+
/**
4+
* 形状抽象类
5+
*
6+
* @author wliduo[i@dolyw.com]
7+
* @date 2023/2/2 17:05
8+
*/
9+
public abstract class Shape {
10+
protected Color color;
11+
12+
public void setColor(Color color) {
13+
this.color = color;
14+
}
15+
16+
public abstract void draw();
17+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.design.bridge;
2+
3+
/**
4+
* 正方形
5+
*
6+
* @author wliduo[i@dolyw.com]
7+
* @date 2023/2/2 17:05
8+
*/
9+
public class SquareShapeImpl extends Shape {
10+
@Override
11+
public void draw() {
12+
color.bepaint("正方形");
13+
}
14+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.design.bridge;
2+
3+
/**
4+
* 白色
5+
*
6+
* @author wliduo[i@dolyw.com]
7+
* @date 2023/2/2 17:05
8+
*/
9+
public class WhiteColorImpl implements Color {
10+
@Override
11+
public void bepaint(String shape) {
12+
System.out.println("白色的" + shape);
13+
}
14+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.design.templatemethod;
2+
3+
/**
4+
* 模板方法 - 创建一个抽象类,它的模板方法被设置为 final
5+
*
6+
* @author wliduo[i@dolyw.com]
7+
* @date 2023/2/2 10:00
8+
*/
9+
public abstract class Game {
10+
11+
/**
12+
* 初始化
13+
*/
14+
abstract void initialize();
15+
16+
/**
17+
* 开始游戏
18+
*/
19+
abstract void startPlay();
20+
21+
/**
22+
* 结束游戏
23+
*/
24+
abstract void endPlay();
25+
26+
/**
27+
* 模板
28+
*/
29+
public final void play() {
30+
// 初始化游戏
31+
initialize();
32+
33+
// 开始游戏
34+
startPlay();
35+
36+
// 结束游戏
37+
endPlay();
38+
}
39+
}

0 commit comments

Comments
 (0)