关于桥梁模式的问题

时间:2012-05-30 23:03:57

标签: design-patterns

我正在研究Bridge模式,我有一个问题。关于我的代码示例,LightSwitchFanSwitch应该是实现者,还是Slider/RadialImplementation可以作为实现者?我的问题是知道谁必须是实现者:两种组合似乎都以任何顺序工作。我不知道我是否清楚。

class Main
{
    static function main()
    {
        new Main();
    }

    public function new()
    {
        var s:Switch;

        s = new LightSwitch();

        s.implementation = new SliderImplementation();
        s.on();
        s.off();

        s.implementation = new DialImplementation();
        s.on();
        s.off();

        s = new FanSwitch();

        s.implementation = new SliderImplementation();
        s.on();
        s.off();

        s.implementation = new DialImplementation();
        s.on();
        s.off();
    }
}

class Switch
{
    public var implementation:SwitchImplementation;
    public function new(){}
    public function on(){}
    public function off(){}
}

class LightSwitch extends Switch 
{
    public override function on()
    {
        trace("Light");
        implementation.on();
    }
    public override function off()
    {
        implementation.off();
    }
}

class FanSwitch extends Switch 
{
    public override function on()
    {
        trace("Fan");
        implementation.on();
    }
    public override function off()
    {
        implementation.off();
    }
}

class SwitchImplementation
{
    public function new(){}
    public function on(){}
    public function off(){}
}

class SliderImplementation extends SwitchImplementation
{
    public override function on()
    {
        trace("> Slider Switch [on]");
    }
    public override function off()
    {
        trace("> Slider Switch [off]");
    }
}

class DialImp lementation extends SwitchImplementation
{
    public override function on()
    {
        trace("> Dial Switch [on]");
    }
    public override function off()
    {
        trace("> Dial Switch [off]");
    }
}

1 个答案:

答案 0 :(得分:0)

示例中的实现者Slider/RadialImplementation类。它们隐藏在通过Light/FanSwitch类的抽象公开的界面后面。