设计模式之(桥接模式BridgePattern的实现)
- 如果某个类存在两个维度的变化,通过桥接模式可以将两个维度分离出来,使两者可以独立扩展;
- 桥接模式用一种巧妙地方式处理多层继承的问题,用抽象关联关系取代多层继承关系;
- 将类之间的静态继承关系转换为动态的对象组合关系,符合组合原则;
- 桥接模式更容易扩展,并且可以显著减少类的个数;
- 如果一个类的两个维度分别是m和n,用多层继承则需要创建m*n个类,而桥接模式则只需要创建m+n+2个类,后面两个是抽象类或者接口;
文章图片
像素类
internal class Matrix
{
//模拟像素矩阵
}
【设计模式之(桥接模式BridgePattern的实现)】一个图像抽象类和4个实现类
internal abstractclass Image
{
protected ImageImp imp;
//注入实现类接口对象
public void SetImageImp(ImageImp imp) { this.imp = imp;
}
public abstract void ParseFile(string fileName);
}
internal class JPGImage : Image
{
public override void ParseFile(string fileName)
{
Matrix m = new Matrix();
imp.DoPaint(m);
Console.WriteLine($"{fileName},格式为JPG");
}
}
internal class PNGImage : Image
{
public override void ParseFile(string fileName)
{
Matrix m = new Matrix();
imp.DoPaint(m);
Console.WriteLine($"{fileName},格式为PNG");
}
}
internal class BMPImage : Image
{
public override void ParseFile(string fileName)
{
Matrix m = new Matrix();
imp.DoPaint(m);
Console.WriteLine($"{fileName},格式为BMP");
}
}
internal class GIFImage : Image
{
public override void ParseFile(string fileName)
{
Matrix m = new Matrix();
imp.DoPaint(m);
Console.WriteLine($"{fileName},格式为GIF");
}
}
一个操作系统接口和3个实现类
internal interface ImageImp
{
void DoPaint(Matrix m);
}
internal class WindowsImp : ImageImp
{
public void DoPaint(Matrix m) { Console.WriteLine("在Windows系统中显示图像");
}
}
internal class LinuxImp : ImageImp
{
public void DoPaint(Matrix m) { Console.WriteLine("在Linux系统中显示图像");
}
}
internal class UnixImp : ImageImp
{
public void DoPaint(Matrix m) { Console.WriteLine("在Unix系统中显示图像");
}
}
配置文件
客户端
static void Main(string[] args)
{
//面向接口编程
Image image;
ImageImp imp;
//读取配置文件
string imageType = ConfigurationManager.AppSettings["image"];
string osType = ConfigurationManager.AppSettings["os"];
//反射生成对象
image = Assembly.Load("BridgePattern").CreateInstance(imageType) as Image;
imp = Assembly.Load("BridgePattern").CreateInstance(osType) as ImageImp;
image.SetImageImp(imp);
image.ParseFile("中国地图");
Console.Read();
}
}
运行结果
文章图片
推荐阅读
- Vulnhub|Vulnhub 之 Earth
- XSS系列之3种类型
- Python|Python之单元测试使用的一点心得
- C语言算法练习之佩奇存钱方案
- 设计模式学习笔记(十三)组合模式及其在树形结构中的应用
- #java|***********-->JAVA50必刷题之第一题<--***************
- SAP|SAP UI5 应用开发教程之五十八 - 使用工厂方法在运行时动态创建不同类型的列表行项目控件试读版
- mysql查询结果实现多列拼接查询
- Java基础之浅谈继承、多态
- 深入理解JavaScript闭包