桥接模式(Bridge Pattern):

将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模式。

模式角色与结构:

示例代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace CSharp.DesignPattern.BridgePattern
{
class Program
{
static void Main(string[] args)
{
Image image = new JPGImage();
ImageImp imp = new WindowsImp(); image.SetImageImp(imp);
image.ParseFile("c:\\txt"); Console.ReadLine();
} //像素矩阵类:辅助类,各种格式的文件最终都被转化为像素矩阵,不同的操作系统提供不同的方式显示像素矩阵
class Matrix
{
//此处代码省略
} //抽象图像类:抽象类
abstract class Image
{
protected ImageImp imp; public void SetImageImp(ImageImp imp)
{
this.imp = imp;
} public abstract void ParseFile(String fileName);
} //JPG格式图像:扩充抽象类
class JPGImage : Image {
public override void ParseFile(String fileName)
{
//模拟解析JPG文件并获得一个像素矩阵对象m;
Matrix m = new Matrix();
imp.DoPaint(m);
Console.WriteLine(fileName + ",格式为JPG。");
}
} //PNG格式图像:扩充抽象类
class PNGImage : Image
{
public override void ParseFile(String fileName)
{
//模拟解析PNG文件并获得一个像素矩阵对象m;
Matrix m = new Matrix();
imp.DoPaint(m);
Console.WriteLine(fileName + ",格式为PNG。");
}
} //BMP格式图像:扩充抽象类
class BMPImage : Image
{
public override void ParseFile(String fileName)
{
//模拟解析BMP文件并获得一个像素矩阵对象m;
Matrix m = new Matrix();
imp.DoPaint(m);
Console.WriteLine(fileName + ",格式为BMP。");
}
} //GIF格式图像:扩充抽象类
class GIFImage : Image
{
public override void ParseFile(String fileName)
{
//模拟解析GIF文件并获得一个像素矩阵对象m;
Matrix m = new Matrix();
imp.DoPaint(m);
Console.WriteLine(fileName + ",格式为GIF。");
}
} //抽象操作系统实现类:实现类接口
interface ImageImp
{
void DoPaint(Matrix m);
} //Windows操作系统实现类:具体实现类
class WindowsImp : ImageImp
{
public void DoPaint(Matrix m)
{
//调用Windows系统的绘制函数绘制像素矩阵
Console.WriteLine("在Windows操作系统中显示图像:");
}
} //Linux操作系统实现类:具体实现类
class LinuxImp : ImageImp
{
public void DoPaint(Matrix m)
{
//调用Linux系统的绘制函数绘制像素矩阵
Console.WriteLine("在Linux操作系统中显示图像:");
}
} //Unix操作系统实现类:具体实现类
class UnixImp : ImageImp
{
public void DoPaint(Matrix m)
{
//调用Unix系统的绘制函数绘制像素矩阵
Console.WriteLine("在Unix操作系统中显示图像:");
}
}
}
}

CSharp设计模式读书笔记(8):桥接模式(学习难度:★★★☆☆,使用频率:★★★☆☆)的更多相关文章

  1. Head First 设计模式读书笔记(1)-策略模式

    一.策略模式的定义 策略模式定义了算法族,分别封装起来,让它们之间可以互换替换,此模式让算法的变化独立使用算法的客户. 二.使用策略模式的一个例子 2.1引出问题 某公司做了一套模拟鸭子的游戏:该游戏 ...

  2. CSharp设计模式读书笔记(24):访问者模式(学习难度:★★★★☆,使用频率:★☆☆☆☆)

    模式角色与结构: 示例代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; ...

  3. CSharp设计模式读书笔记(23):模板方法模式(学习难度:★★☆☆☆,使用频率:★★★☆☆)

    模板方法模式:定义一个操作中算法的框架,而将一些步骤延迟到子类中.模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 模式角色与结构: 实现代码: using System; ...

  4. CSharp设计模式读书笔记(22):策略模式(学习难度:★☆☆☆☆,使用频率:★★★★☆)

    策略模式(Strategy Pattern):定义一系列算法类,将每一个算法封装起来,并让它们可以相互替换,策略模式让算法独立于使用它的客户而变化,也称为政策模式(Policy). 模式角色与结构: ...

  5. CSharp设计模式读书笔记(21):状态模式(学习难度:★★★☆☆,使用频率:★★★☆☆)

    模式角色与结构: 示例代码:(本示例在具体状态类中实现状态切换,也可以在环境类中实现状态切换.状态模式一定程度上违背开闭原则) using System; using System.Collectio ...

  6. CSharp设计模式读书笔记(18):中介者模式(学习难度:★★★☆☆,使用频率:★★☆☆☆)

    中介者模式(Mediator Pattern):用一个中介对象(中介者)来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互,中介者模式又称为 ...

  7. CSharp设计模式读书笔记(17):迭代器模式(学习难度:★★★☆☆,使用频率:★★★★★)

    迭代器模式(Iterator Pattern):提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示,其别名为游标(Cursor). 模式角色与结构: 实现代码: using System; us ...

  8. CSharp设计模式读书笔记(15):命令模式(学习难度:★★★☆☆,使用频率:★★★★☆)

    命令模式(Command Pattern):将一个请求封装为一个对象,从而让我们可用不同的请求对客户进行参数化:对请求排队或者记录请求日志,以及支持可撤销的操作.命令模式是一种对象行为型模式,其别名为 ...

  9. CSharp设计模式读书笔记(14):职责链模式(学习难度:★★★☆☆,使用频率:★★☆☆☆)

    职责链模式(Chain of Responsibility  Pattern):避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象 ...

随机推荐

  1. 可以部署在广域网执行QQ高仿版 GG2014 (源代码)

      距上次GG V3.7版本号(可在广域网部署执行的QQ高仿版 -- GG叽叽V3.7.优化视频聊天.控制很多其它相关细节)的公布.已经有50天了,这50天对于GG来说.是一个重大的飞跃. 由于这段时 ...

  2. 为什么windows dos和Linux shell有这样的差别??

    Windows dos随着impdp导入数据库: impdp "sys/password@ip:1521/sidname as sysdba" directory=dbdir du ...

  3. 如何使盘ISO图像文件

    原创作品.从 "深蓝blog" 博客,欢迎转载,请务必注明转载的来源,权法律责任. 深蓝的blog:http://blog.csdn.net/huangyanlong/articl ...

  4. 第三篇——第二部分——第二文 计划搭建SQL Server镜像

    原文:第三篇--第二部分--第二文 计划搭建SQL Server镜像 本文紧跟上一章:SQL Server镜像简介 本文出处:http://blog.csdn.net/dba_huangzj/arti ...

  5. JVM Input Arguments Lookup (JMX)(转)

    JVM Input Arguments Lookup (JMX) Maps JVM input arguments -- but not main arguments -- using JMX to ...

  6. Jg-Table 过程1 (jgTable)

    近期使用Table,他写了一.时间紧急.还有一点简单的无精写作.但主要的功能已经支持, 大家有时间可以看看,欢迎吐槽 jg-table 1.0                 1. 支持固定头角    ...

  7. 从session实现机制分析模拟请求验证码的可行性(转)

    悲剧了,发现写完这篇blog没有配上这个格调超高的标题.   1.0问题背景 现在要实现一个带验证码网站的的自动登陆功能.验证码识别过程不再这篇文章的讨论之中.(之后有篇文章我会详细的总结验证码的识别 ...

  8. 设计模式 Template Method模式 显示程序猿的一天

    转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/26276093 不断设计模式~ Template Method模式 老套路,看高清 ...

  9. Sqlmap渗透测试是常用语句

    1.获取站点信息 sqlmap.py  -u http://.../ 2.获取站点的数据库信息 sqlmap.py -u http://../ --dbs 3.获取数据库DataBaseTest下的表 ...

  10. 【SSH之旅】一步学习的步Struts1相框(三):分析控制Struts1示例

    部分博客,,先后实施了Struts抽样.现在我们来分析这个样本.具体解释Struts1. Struts1的几个核心组件是值得我们注意的: (1)ActionServlet(核心控制器). (2)Act ...