设计模式之浅浅的理解桥接模式
来源:互联网 发布:mmd舞蹈动作数据下载 编辑:程序博客网 时间:2024/05/08 21:13
网上有不少博文都深入浅出的论述了桥接模式的作用和设计方法。不过我总觉得自己理解得不到位。
下边是我的理解和实验。
桥接模式理解:
在理解桥接模式中,网上的博客中都谈到抽象与实现的分离,这里的实现与继承中的实现不同。对一个多维可变的需求抽象出高级操作,封装在抽象类当中,将可变的因素封装在接口里,然后实现该接口。在抽象类中持有这些接口的引用,在高级操作里调用这些接口的实现方法。这使得需求的真正实现与抽象分离了出来。
假如有这样一个需求:
不同届的毕业生坐不同的车去不同的学校报名。应届、非应届||火车、客车||一本学校、二本学校、三本学校
1、封装可变因素,这里我定义了三个接口
public interface IGraduate { void print(); } public class Graduates : IGraduate { public void print() { Console.Write("应届生"); } } public class NonGraduates : IGraduate { public void print() { Console.Write("非应届生"); } }
public interface IWay { void print(); } public class Train : IWay { public void print() { Console.Write("坐火车"); } } public class Bus : IWay { public void print() { Console.Write("坐客车"); } }
public interface IGrade { void print(); } public class OneGrade : IGrade { public void print() { Console.Write("一本院校"); } } public class TwoGrade : IGrade { public void print() { Console.Write("二本院校"); } } public class ThreeGrade : IGrade { public void print() { Console.Write("三本院校"); } }2、抽象出高级操作并保持引用
public abstract class Entered { private IGraduate graduate; private IWay way; private IGrade grade; public IGraduate Graduate { get { return graduate; } } public IWay Way { get { return way; } } public IGrade Grade { get { return grade; } } public Entered(IGraduate graduate, IWay way, IGrade grade) { this.graduate = graduate; this.way = way; this.grade = grade; } public abstract void goEnter(); }3、网上的例子都将其中的一个变化因素用来显现该抽象了,这我这个例子中,我将所有变化因素都做成接口,接下来只是简单的继承该抽象。目的是搞清楚多个变化是如何桥接到抽象中来的。
public class WeEntered : Entered { public WeEntered(IGraduate graduate, IWay way, IGrade grade) : base(graduate, way, grade) { } public override void goEnter() { Graduate.print(); Console.Write("-"); Way.print(); Console.Write("-"); Grade.print(); } }4、最后的简单调用
Entered entered = new WeEntered(new Graduates(),new Train(),new TwoGrade()); entered.goEnter(); Console.Read();
总结:此例中想要拓展任意一个变化都很方便,比如增加一种小轿车的类型。另外不同的变化拓展起来也很方便,比如在火车类里拓展一个运行时间等。
最终要的事情是要理解抽象与实现是什么,最最重要的事情是要动手写两遍。
本文写得很糙,大家不懂的地方可以网上查阅别的博文和资料,我这里最重要的是提供了一个和别的博文有点不同的例子。
欢迎大家评论。
0 0
- 设计模式之浅浅的理解桥接模式
- 装饰者模式浅浅的理解
- GOF23设计模式之桥接模式理解
- 个人对设计模式的理解-->桥接模式
- 设计模式之对反射的理解
- 设计模式之简单工厂的理解
- 设计模式的理解
- 设计模式的理解
- 设计模式的理解
- 设计模式的理解
- 设计模式的理解
- 设计模式的理解
- 设计模式之我吾-代理模式的理解
- 个人对于PHP设计模式之工厂模式的理解
- 设计模式之abstract factory工厂模式的理解
- GOF设计模式之适配器模式的理解
- GOF23设计模式之组合模式的理解
- GOF23设计模式之中介者模式的理解
- 本地线程ThreadLocal
- 浅谈 SOAP
- java 使用countdownlatch 异步导出excel并merge打包
- 类-静态内部类
- JSPatch应用的一些逻辑
- 设计模式之浅浅的理解桥接模式
- linux驱动开发书籍(待续)
- 图解数据读写与Cache操作
- 这是一道数学类的问题,对=于这类的问题,当然我们要列出数学公式,用程序实现它可以了
- java工厂设计模式
- Spring AOP AspectJ切入点语法详解,execution,within,this.......
- java实现imread 读图
- 3327顺序表应用4:元素位置互换之逆置算法
- poj 2352 线段树 二分