首页 > 代码库 > 设计模式之桥接模式

设计模式之桥接模式

1、类图

技术分享

实例类图

技术分享

2、创建项目

……………………

3、 新建Matrix:像素矩阵类,辅助类,各种格式的图像文件最终都会被转化为像素矩阵,不同的操作系统提供不同的方式现实像素矩阵。

namespace BridgeSample

{

    class Matrix

    {

        //代码省略

    }

} 

4、 新建ImageImp:抽象操作系统实现类,充当实现类接口

namespace BridgeSample

{

    interface ImageImp

    {

        void DoPaint(Matrix m);  //显示像素矩阵

    }

}

5、 新建WindowsImp:Windows操作系统实现类,充当具体实现类 

using System;

namespace BridgeSample

{

    class WindowsImp : ImageImp

    {

        public void DoPaint(Matrix m)

        {

         //调用Windows系统的绘制函数绘制像素矩阵

         Console.Write("在Windows操作系统中显示图像:");

        }

    }

6、 新建LinuxImp:Linux操作系统实现类,充当具体实现类

//LinuxImp.cs

using System;

namespace BridgeSample

{

    class LinuxImp : ImageImp

    {

        public void DoPaint(Matrix m)

        {

            //调用Linux系统的绘制函数绘制像素矩阵

            Console.Write("在Linux操作系统中显示图像:");

        }

    }

}

7、 新建UnixImp:UNIX操作系统实现类,充当具体实现类 

using System; 

namespace BridgeSample

{

    class UnixImp : ImageImp

    {

        public void DoPaint(Matrix m)

        {

            //调用Unix系统的绘制函数绘制像素矩阵

            Console.Write("在Unix操作系统中显示图像:");

        }

    }

}

8、 Image:抽象图像类,充当抽象类

namespace BridgeSample

{

    abstract class Image

    {

        protected ImageImp imp;

        //注入实现类接口对象

        public void SetImageImp(ImageImp imp)

        {

            this.imp = imp;

        }

        /// <summary>

        /// 文件转换到像素矩阵

        /// </summary>

        /// <param name="fileName"></param>

        public abstract void ParseFile(string fileName);

    }

9、 JPGImage:JPG格式图像类,充当扩充抽象类 

using System;

namespace BridgeSample

{

    class JPGImage : Image

    {

        public override void ParseFile(string fileName)

        {

            //模拟解析JPG文件并获得一个像素矩阵对象m;

            Matrix m = new Matrix();

            imp.DoPaint(m); //调用操作系统的像素转换方法

 

            Console.WriteLine("{0},格式为JPG。",fileName);

        }

    }

}

10、 新建PNGImage:PNG格式图像类,充当扩充抽象类

using System;

namespace BridgeSample

{

    class PNGImage : Image

    {

        public override void ParseFile(string fileName)

        {

            //模拟解析PNG文件并获得一个像素矩阵对象m;

            Matrix m = new Matrix();

            imp.DoPaint(m);//调用操作系统的像素转换方法

 

            Console.WriteLine("{0},格式为PNG。", fileName);

        }

    }

11、 新建BMPImage:BMP格式图像类,充当扩充抽象类

using System;

namespace BridgeSample

{

    class BMPImage : Image

    {

        public override void ParseFile(string fileName)

        {

            //模拟解析PNG文件并获得一个像素矩阵对象m;

            Matrix m = new Matrix();

            imp.DoPaint(m);//调用操作系统的像素转换方法

 

            Console.WriteLine("{0},格式为BMP。", fileName);

        }

    }

}

12、 新建GIFImage:GIF格式图像类,充当扩充抽象类 

using System; 

namespace BridgeSample

{

    class GIFImage : Image

    {

        public override void ParseFile(string fileName)

        {

            //模拟解析PNG文件并获得一个像素矩阵对象m;

            Matrix m = new Matrix();

            imp.DoPaint(m);//调用操作系统的像素转换方法

            

            Console.WriteLine("{0},格式为GIF。", fileName);

        }

    }

13、 新建 配置文件App.config

<?xml version="1.0" encoding="utf-8" ?>

<configuration>

  <appSettings>

    <!--RefinedAbstraction-->

    <add key="image" value="http://www.mamicode.com/BridgeSample.PNGImage"/>

    <!--ConcreteImplementor-->

    <add key="os" value="http://www.mamicode.com/BridgeSample.WindowsImp"/>

  </appSettings>

</configuration>

14、 编辑Program:客户端测试类

using System;

using System.Configuration;

using System.Reflection;

namespace BridgeSample

{

    class Program

    {

        static void Main(string[] args)

        {

            Image image;

            ImageImp imp;

            //读取配置文件

            string imageType = ConfigurationManager.AppSettings["image"];

            string osType = ConfigurationManager.AppSettings["os"];          

            //反射生成对象

            image = (Image)Assembly.Load("BridgeSample").CreateInstance(imageType);

            imp = (ImageImp)Assembly.Load("BridgeSample").CreateInstance(osType);            

            image.SetImageImp(imp);

            image.ParseFile("中国地图");

            Console.Read();

        }

    }

15、 运行模式代码:

 技术分享

16、如果需要更换图像文件格式或者更换操作系统,只需修改配置文件即可。

<?xml version="1.0" encoding="utf-8" ?>

<configuration>

  <appSettings>

    <!--RefinedAbstraction-->

    <add key="image" value="http://www.mamicode.com/BridgeSample.BMPImage"/>

    <!--ConcreteImplementor-->

    <add key="os" value="http://www.mamicode.com/BridgeSample.LinuxImp"/>

  </appSettings>

</configuration> 

设计模式之桥接模式