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="BridgeSample.PNGImage"/>
<!--ConcreteImplementor-->
<add key="os" value="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="BridgeSample.BMPImage"/>
<!--ConcreteImplementor-->
<add key="os" value="BridgeSample.LinuxImp"/>
</appSettings>
</configuration>