设计模式-桥接模式-结构性

桥接模式

抽象产品
产品A类包含a1和a2两种具体的
产品B类包含b1和b2两种具体的
组合产品包含一个A产品和一个B产品
抽象建造工厂生产一个组合产品
如果用建造者模式将产生2*2四个具体的工厂,如a1 b1 / a2 b2/
a1 b2/a2 b1,随着类型增加将指数增长
桥接模式,可以将B类做为变量放进A类中,A类变成带有b1或b2的产品,A类在生产具体产品a1或a2后可以设置选择带b1或b2

在这里插入图片描述
在这里插入图片描述

桥接模式和组合模式的区别,在于元素之间是嵌套关联的,
如下例子中,图片类型中包含操作系统变量

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BridgeSample
{
    //辅助像素矩阵类
    class Matrix
    {
        //
    }
    //抽象操作系统实现显示类
    interface ImageImp
    {
        void DoPaint(Matrix m);
    }
    //windows操作系统实现类
    class WindowsImp:ImageImp
    {
        public void DoPaint(Matrix m)
        {
            Console.WriteLine("在Windows中显示图像");
        }
    }
    //在linux中显示图像
    class LinuxImp : ImageImp
    {
        public void DoPaint(Matrix m)
        {
            Console.WriteLine("在linux中显示图像");
        }
    }
    //抽象图像类
    abstract class Image
    {
        protected ImageImp imp;
        public void SetImageImp(ImageImp imp)
        {
            this.imp = imp;
        }
        public abstract void ParseFile(string FileName);
    }
    //具体图像类--当作扩充抽象类
    class JPGImage :Image
    {
        public override void ParseFile(string FileName)
        {
            Matrix m = new Matrix();
            imp.DoPaint(m);
            Console.WriteLine($"{FileName}" + "格式为JPG");
        }
    }
    //具体图像类--当作扩充抽象类
    class PNGImage : Image
    {
        public override void ParseFile(string FileName)
        {
            Matrix m = new Matrix();
            imp.DoPaint(m);
            Console.WriteLine($"{FileName}" + "格式为PNG");
        }
    }
    class Program
    {
       
        static void Main(string[] args)
        {
            ImageImp imp = new WindowsImp();
            Image image = new PNGImage();
            image.SetImageImp(imp);
            image.ParseFile("桥接模式");
            Console.ReadLine();


        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值