操作上的抽象
1using System;23namespace Gof.Test.Bridge4{5 public interface ITankAction6 {7 string Shot(string tankNO);8 }9}
操作具体实现1
1using System; 2 3namespace Gof.Test.Bridge 4{ 5 public class PCActionDriver:ITankAction 6 { 7 public PCActionDriver() 8 { 9 }1011 ITankAction 成员#region ITankAction 成员1213 public string Shot(string tankNO)14 {15 return tankNO + " Shot in PC";16 }1718 #endregion19 }20}21
操作具体实现2
1using System; 2 3namespace Gof.Test.Bridge 4{ 5 public class TVActionDriver:ITankAction 6 { 7 public TVActionDriver() 8 { 9 }10 ITankAction 成员#region ITankAction 成员1112 public string Shot(string tankNO)13 {14 return tankNO + " Shot in TV";15 }1617 #endregion18 }19}20
我们想要的抽象
1using System; 2 3namespace Gof.Test.Bridge 4{ 5 public abstract class Tank 6 { 7 public Tank(ITankAction action) 8 { 9 _action = action;10 }11 public ITankAction Action12 {13 get14 {15 return _action;16 }17 set18 {19 _action = value;20 }21 }22 private ITankAction _action;2324 public abstract string Shot();25 }26}
抽象上的类型方向变化1
1using System; 2 3namespace Gof.Test.Bridge 4{ 5 public class Tank97:Tank 6 { 7 public Tank97(ITankAction action):base(action) 8 {} 9 public override string Shot()10 {11 return Action.Shot("Tank97");12 }13 }14}
抽象在类型上的变化2
1using System; 2 3namespace Gof.Test.Bridge 4{ 5 public class Tank98:Tank 6 { 7 public Tank98(ITankAction action):base(action) 8 {} 9 public override string Shot()10 {11 return Action.Shot("Tank98");12 }13 }14}
结论:一个抽象是一个类,它依赖于抽象方法。最简单的抽象例子是一个抽象层次结构,其中,超类中的具体方法依赖于其他抽象方法。当我们按照原有的层次结构,沿着另外的方向,继续派生子类时,我们可能不得不把这些抽象方法移入其他层次结构。这时,我们可以使用桥接模式,从而将一个抽象与这个抽象中的抽象方法的实现分离开来。
转载于:https://www.cnblogs.com/nanshouyong326/archive/2007/01/05/612369.html