桥接模式
#优点
- 抽象与实现的分离
- 优秀的扩展能力
#缺点 - 增加了系统的理解与设计难度
- 使用聚合关联关系建立在抽象层
要求开发者针对抽象进行设计与编程
样例
手机类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Bridge
{
// 抽象类 手机
abstract class Phone
{
// 通过组合的方式 桥接其它行为
protected IColor color;
public IColor Color { get => color; set => color = value; }
// 抽象方法 运行
public abstract void run();
}
}
华为手机
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Bridge
{
// 华为手机
class HwPhone : Phone
{
// 颜色 初始化构造函数
public HwPhone(IColor color)
{
this.Color = color;
}
// 重写运行函数
public override void run()
{
this.Color.UseColor();
System.Console.WriteLine("华为手机");
}
}
}
苹果手机
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Bridge
{
// 苹果手机
class AppPhone : Phone
{
// 颜色 构造函数
public AppPhone(IColor color)
{
this.Color = color;
}
// 重写运行函数
public override void run()
{
this.Color.UseColor();
Console.WriteLine("苹果手机");
}
}
}
颜色接口
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Bridge
{
// 颜色接口
interface IColor
{
// 使用颜色
void UseColor();
}
}
红色
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Bridge
{
// 红色 继承颜色
class RedColor : IColor
{
// 使用颜色
public void UseColor()
{
System.Console.WriteLine("---红色---");
}
}
}
黄色
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Bridge
{
// 黄色
class YellowColor : IColor
{
// 使用颜色
public void UseColor()
{
System.Console.WriteLine("---黄色---");
}
}
}
蓝色
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Bridge
{
// 蓝色
class BlueColor : IColor
{
// 使用颜色
public void UseColor()
{
System.Console.WriteLine("---蓝色---");
}
}
}
测试桥接模式
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Bridge
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("华为手机==============================");
HwPhone redHwPhone = new HwPhone(new RedColor());
redHwPhone.run();
HwPhone blueHwPhone = new HwPhone(new BlueColor());
blueHwPhone.run();
Console.WriteLine("苹果手机==============================");
AppPhone yellowAppPhone = new AppPhone(new YellowColor());
yellowAppPhone.run();
AppPhone blueAppPhone = new AppPhone(new BlueColor());
blueAppPhone.run();
System.Console.ReadKey();
}
}
}