桥接模式
桥接模式是用于把抽象化与实现化解耦,使得两者可以独立变化。(属于结构型模式的一种)。这种模式主要是设计一个作为桥接的接口,使继承他的实体类能够独立于这个接口实现,不受其桥接接口的影响。
优点:1.抽象和实体分离。2.扩展能力强。3.实现细节对用户透明。
缺点:会增加系统的理解和设计难度。
关键逻辑:抽象类依赖实体类。
何时使用:系统的实现有多个角度,每个角度都有所变化。这时就需要使用桥接模式把这种多角度分类分离出来,让他们独立变化。
下面我列举一个例子作为参考:人开灯的例子,一共有卧室,客厅两个灯,主人可以选择用遥控和手动的方法进行开灯和关灯。
如图:
这样看起来如果用代码写很麻烦,有很多重复代码。所以我们才会想的用设计模式,是代码更简洁,扩展性更高。
如上图,我们可以根据人的想法,通过开关这个桥接类,很好的控制用户想要的灯。
用代码做一个例子如下:
1.首先创建一个灯的接口。
/// <summary>
/// 灯的接口
/// </summary>
public interface Light
{
void Open( );
void Close( );
}
2.创建灯的实体。来实现这个接口。
/// <summary>
/// 客厅的灯
/// </summary>
class DrawingRoom_Light : Light
{
public void Close( )
{
Debug.Log("客厅的灯关了");
}
public void Open( )
{
Debug.Log("客厅的灯开了");
}
}
/// <summary>
/// 卧室的灯
/// </summary>
class Bedroom_Light : Light
{
public void Close( )
{
Debug.Log("卧室的灯关了");
}
public void Open( )
{
Debug.Log("卧室的灯开了");
}
}
3.创建开关的抽象类。
/// <summary>
/// 开关
/// </summary>
public abstract class Switch
{
public Light light;
public Switch(Light light)
{
this.light = light;
}
public abstract void Open();
public abstract void Close();
}
4.创建实现开关的实体类,手动和遥控类。
/// <summary>
/// 手动
/// </summary>
public class Manual : Switch
{
public Manual( Light light):base(light)
{
Debug.Log("手动的让");
}
public override void Close()
{
light.Close();
}
public override void Open()
{
light.Open();
}
}
/// <summary>
/// 遥控
/// </summary>
/// <summary>
/// 遥控
/// </summary>
public class Remote : Switch
{
public Remote(Light light) : base(light)
{
Debug.Log("遥控的让");
}
public override void Close()
{
light.Close();
}
public override void Open()
{
light.Open();
}
}
5.创建最重要的类,人(People)类。
public class People : MonoBehaviour
{
void Start()
{
//人想用什么方式开哪个灯只需要新实例化一个实体类就可以。
Switch switchs=new Manual(new Bedroom_Light());
switchs.Open();
Switch switchs1=new Manual(new DrawingRoom_Light());
switchs.Open();
Switch switchs2=new Remote(new Bedroom_Light());
switchs.Open();
Switch switchs3=new Remote(new Bedroom_Light());
switchs.Open();
}
}
运行结果:
本人写博客也是为了学习,方便自己的理解。如果有不正确的欢迎指正。