面对如上问题,解决方案
方案A:抗变化能力小,外部和子系统有过多耦合
方案B:抗变化能力大,将外部和内部子系统解耦
注:设计模式中的“接口”是指公有部分或Protected部分(可以被子类继承)
C#内internal的东西不能当外部接口
对于字段,声明public后,其不具有接口实现相关的特质,不推荐向外暴露字段。
外观模式:
动机
意图
结构【将子系统隐藏起来】
成为子系统需要各部分依赖紧密、在抽象上融为一体、变化轴线一致。
代码
子系统
internal class Wheel
{
public void WAction1()
{
}
public void WAction2()
{
}
}
internal class Engine
{
public void EAction1()
{
}
public void EAction2()
{
}
}
internal class BodyWork
{
public void BAction1()
{
}
public void BAction2()
{
}
}
Facade
public class TankFacade
{
private Wheel[] wheels = new Wheel[4];
private Engine[] engines = new Engine[4];
private BodyWork bodyWork = new BodyWork();
public void Start()
{
//....
bodyWork.BAction1();
//....
engines[1].EAction1();
}
public void Stop()
{
}
public void Run()
{
}
}
要点