桥接模式(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. Android网络图片显示在ImageView 上面

    在写这篇博文的时候,我參与了一个项目的开发,里面涉及了非常多网络调用相关的问题,我记得我在刚刚開始做android项目的时候,以前就遇到这个问题,当时在网上搜索了一下,发现了一篇博文,如今与大家分享一 ...

  2. 查看.a架构文件

    苹果公司现在要求所有新提交的评论app,我们必须支持64位架构.而我们的在线项目编制,操作员做了一堆SDK在需要访问,我们发现,在这个过程中,有些SDK的.a文件进入后,链接错误,如提示 Undefi ...

  3. Cocos2d-x场景变化相关功能介绍

    现场由导演级交换机Director实现.之间的相关的功能,如下面: runWithScene(Scene* scene).该函数能够执行场景.仅仅能在启动第一个场景时候调用该函数.假设已经有一个场景执 ...

  4. c# winform 中的 工具栏自动隐藏 splitter用法 带源码

    c# winform 中的 工具栏自动隐藏 splitter用法 带源码 代码下载地址 http://download.csdn.net/detail/simadi/7649313

  5. JCombox

    A component that combines a button or editable field and a drop-down list. The user can select a val ...

  6. C指针决心 ------ 指针的概念和元素

     本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020 指针在C语言中的地位,不用多说. 指针的概念 指针是一个特殊的变量,它里面存储 ...

  7. pyspark简要原则

    概要 这是一个看前一段时间spark的python支持的时,有点简单的后pyspark内python代码,我们把一个一般流程.虽然几乎没有python,但基本上能看懂pyspark它是如何使不同的虚拟 ...

  8. atitit.(设计模式1)--—职责链(chain of responsibility)最佳实践O7 转换日期

    atitit.设计模式(1)---职责链模式(chain of responsibility)最佳实践O7 日期转换 1. 需求:::日期转换 1 2. 能够选择的模式: 表格模式,责任链模式 1 3 ...

  9. REQIMPORT-购买内部应用程序(R12.2.3)

     採购内部申请(R12.2.3) --US Program:Requisition Import Short Name:REQIMPORT Application:Purchasing Execu ...

  10. leetcode第一刷_Spiral Matrix II

    跟上一题的策略全然一样,这个题是要求保存当前增加的是第几个数,由于矩阵里面存的就是这个东西. 我有尝试想过是不是有一种方法能够直接推算出每一行的数据是哪些.但没过多久就放弃了.这样的方法尽管能够避免在 ...