本人从事开发工作也有多年,目前坐标湖南长沙,以前在各种平台也发过一些文章但是都没有坚持下来; 这个系列是要写设计模式的,将23大设计模式逐一用自己的理解加例子写出来。 其一、眨眼就到了而立之年,觉得自己记忆力也是下降久做过的东西总是记不起,果然是好记性不如烂笔头。 其二、这么多年白嫖了网上很多的文章,视频,一直觉得应该分享一些东西但总是沉不下心去做。 其三、可能写的不好至少也留下一些东西,也是希望能帮助到一些朋友。
在我的理解里:每一种设计模式仅仅是一种思想,并不是说每个设计模式之间就会有很明确的边界。有时候你会觉得某两种设计模式实现起来特别像,其实是因为有些的设计模式延伸出来的仅仅是着重的看待点不一样而已;学习设计模式一定不是只学习固定的实现方式。要了解设计思想,然后在项目中灵活得进行最适合设计。
桥接模式:“将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现的,从而降低了抽象和实现这两个可变维度的耦合度。”
直接上一段实现代码
public class Bridge { //我们的操作系统接口 interface ISystem { String systemName(); } //Unix系统 public static class Unix implements ISystem { @Override public String systemName() { return "Unix"; } } //Linux系统 public static class Linux implements ISystem { @Override public String systemName() { return "Linux"; } } //文件文件格式 interface IFileFormat { String format(); } //AVI格式 public static class AVI implements IFileFormat { @Override public String format() { return "AVI"; } } //MP4格式 public static class MP4 implements IFileFormat { @Override public String format() { return "MP4"; } } //媒体播放器抽象 public static abstract class MediaPlay { protected IFileFormat mIFileFormat; protected ISystem mISystem; public MediaPlay(IFileFormat format, ISystem system) { mIFileFormat = format; mISystem = system; } public abstract String play(); } //某某媒体播放实现 public static class LYLMediaPlay extends MediaPlay { public LYLMediaPlay(IFileFormat format, ISystem system) { super(format, system); } @Override public String play() { return "当前播放:文件格式:" + mIFileFormat.format() + ";系统类型:" + mISystem.systemName(); } } }调用示例
//桥接模式 Bridge.AVI avi = new Bridge.AVI(); Bridge.MP4 mp4 = new Bridge.MP4(); Bridge.Linux linux = new Bridge.Linux(); Bridge.Unix unix = new Bridge.Unix(); Log.d(new Bridge.LYLMediaPlay(mp4, unix).play()); Log.d(new Bridge.LYLMediaPlay(avi, linux).play());输出结果
当前播放:文件格式:MP4;系统类型:Unix 当前播放:文件格式:AVI;系统类型:Linux桥接模式链接.
虽然我文章写得不怎么样,但是单从目的而言,还是希望自己能坚持写下去,当一个积累一个回顾吧。