Bridge模式 (桥接模式)
优秀博文:
http://www.jdon.com/designpatterns/bridge.htm
http://home.cnblogs.com/group/topic/30854.html
概述
在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这就要使用Bridge模式。
意图
将抽象部分与实现部分分离,使它们都可以独立的变化。[GOF 《设计模式》]
结构图
Bridge模式结构图
1 package zzuli.acmen.bridge;
2
3 /**
4 * 桥接模式 也就是把一些有两个甚至多个的决定条件组成的类从继承变成
5 *
6 * @author Administrator
7 *
8 */
9 /*我的理解是比如选菜
10 他的要求可能有
11 辣 微辣 不辣
12 牛肉面 鸡蛋面
13 大份 小份
14
15 他就是把这些不相干东西组成一个类 比如微辣大份牛肉面
16 那我的理解是 以一个条件为主要条件,其他条件作为其中的属性然后到客户需要的时候进行组装!
17
18 下面的例子不考虑 大小份了 O(∩_∩)O~
19 */
20 public class Client {
21
22 public static void main(String[] args){
23
24 WeiSingleton weiS = new WeiSingleton(new WeiLa());
25
26 NiuRouMian niu = new NiuRouMian();
27 niu.setWeiDao();
28
29 WeiSingleton weiSS = new WeiSingleton(new La());
30 NiuRouMian niu1 = new NiuRouMian();
31 niu1.setWeiDao();
32
33
34 }
35
36 }
1 package zzuli.acmen.bridge;
2
3 public abstract class Food {
4
5 Wei wei ;
6
7 protected void setWei(){
8
9 this.wei = WeiSingleton.getWei();
10
11 }
12
13 abstract void setWeiDao();
14
15
16
17 }
18
19 /*
20 * 味道的接口和其实现分别是微辣 辣 不辣 你还可以定义很多的味道哦
21 */
22
23 interface Wei{
24 public void setLiang();
25 }
26
27 class WeiLa implements Wei{
28
29 public void setLiang() {
30 System.out.println("我加进去了一点辣椒,所以是微辣");
31
32 }
33
34 }
35
36 class La implements Wei{
37
38 public void setLiang() {
39 System.out.println("我加了很多辣椒,所以是辣");
40
41 }
42
43 }
44
45 class BuLa implements Wei{
46
47 public void setLiang() {
48 System.out.println("我不喜欢辣椒,我是不辣");
49
50 }
51
52 }
53
54 //我的两种饭!牛肉面 和 鸡蛋面
55 class NiuRouMian extends Food{
56
57 public NiuRouMian(){
58 this.setWei();
59 }
60
61 @Override
62 void setWeiDao() {
63 System.out.println("我是牛肉面");
64 this.wei.setLiang();
65
66 }
67
68 }
69
70 class EggMian extends Food{
71
72 public EggMian (){
73 this.setWei();
74 }
75
76 @Override
77 void setWeiDao() {
78 System.out.println("我是鸡蛋面");
79 this.wei.setLiang();
80
81 }
82
83
84 }
85
86 // 用于产生一个味道,并且
87 class WeiSingleton{
88
89 private static Wei wei;
90
91 public WeiSingleton(Wei wei){
92
93 this.wei = wei;
94 }
95
96 public static Wei getWei(){
97
98 return wei;
99
100 }
101
102 }