0

私は 2 つのカメラ ブランドのインターフェイスを作成しています。カメラへのインターフェイスは異なります (SDK が異なります) が、アクションは同じです (ズーム、パン、チルト)。これには 2 つのクラスが必要です。方法がわかりません。これをさらに説明するので、例を示します。

class program
{
    public void main(string Brand)
    {
        CameraController controller;

        if( Brand == "A" )
            controller = new BrandACameraController();
        else
            controller = new BrandBCameraController();

        controller.Pan(); //pan with chosen camera brand
    }
}

class BrandACameraController
{
    public BrandACameraController()
    { 

    }

    public void Pan()
    {
        //interface with brand a camera
    }

    public void Tilt()
    {
        //interface with brand a camera
    }

    public void Zoom()
    {
        //interface with brand a camera
    }
}

class BrandBCameraController
{
    public BrandBCameraController()
    { 

    }

    public void Pan()
    {
        //interface with brand b camera
    }

    public void Tilt()
    {
        //interface with brand b camera
    }

    public void Zoom()
    {
        //interface with brand b camera
    }
}

どうすればいいですか?

4

4 に答える 4

4
  1. すべての共有メソッドとプロパティを含むインターフェイスを作成します。
  2. class BrandACameraControllerそのインターフェースをおよびに実装しますclass BrandBCameraController
  3. 実際に具体的なクラスを作成する必要がある場所を除いて、そのインターフェイスをどこでも使用してください。

あなたの例では:

interface ICameraController
{
    void Pan();
    void Tilt();
    void Zoom();
}

class BrandACameraController: ICameraController
{
    public BrandACameraController()
    {

    }

    public void Pan()
    {
        //interface with brand a camera
    }

    public void Tilt()
    {
        //interface with brand a camera
    }

    public void Zoom()
    {
        //interface with brand a camera
    }
}

class BrandBCameraController: ICameraController
{
    public BrandBCameraController()
    {

    }

    public void Pan()
    {
        //interface with brand b camera
    }

    public void Tilt()
    {
        //interface with brand b camera
    }

    public void Zoom()
    {
        //interface with brand b camera
    }
}

おそらく、CameraControllerFactoryそれらの作成をカプセル化するためにも作成する必要があります。

static class CameraControllerFactory
{
    public static ICameraController Create(string brand)
    {
        if (brand == "A")
            return new BrandACameraController();
        else
            return new BrandBCameraController();
    }
}

Brand次に、何を作成するかを確認する例のコードは次のようになります。

ICameraController controller = CameraControllerFactory.Create(Brand);

controller.Pan(); //pan with chosen camera brand
于 2013-06-14T08:35:09.063 に答える