您现在的位置是:首页 > 技术博客 > PHP设计模式六大原则之接口隔离原则

PHP设计模式六大原则之接口隔离原则

2021-08-10文远技术博客382417

PHP

1、什么是接口隔离原则

客户端不应该依赖它不需要的接口,一个类对另一个类的依赖应该建立在最小的接口上


2、解决什么问题

类A通过接口I实现多个方法,类B也通过接口I实现多个方法,如果接口I对于类A和类B来说不是最小接口,则类A、类B必须去实现他们不需要的方法。


3、代码示例

//把接口分成3个,I是通用接口,P、Q分别对应C、D类
interface I
{
    public function action1();
}

interface P
{
    public function action2();
    public function action3();
}
interface Q
{
    public function action4();
    public function action5();
    public function action6();
}

class C implements I,P
{
    public function action1()
    {
        echo "C类的action1方法".PHP_EOL;
    }

    public function action2()
    {
        echo "C类的action2方法".PHP_EOL;
    }

    public function action3()
    {
        echo "C类的action3方法".PHP_EOL;
    }
}

class D implements I,Q
{
    public function action1()
    {
        echo "B类的action1方法".PHP_EOL;
    }

    public function action4()
    {
        echo "B类的action4方法".PHP_EOL;
    }

    public function action5()
    {
        echo "B类的action5方法".PHP_EOL;
    }

    public function action6()
    {
        echo "B类的action6方法".PHP_EOL;
    }
}

class A
{
    public function exec1(I $i)
    {
        $i->action1();
    }

    public function exec2(I $i)
    {
        $i->action2();
    }

    public function exec3(I $i)
    {
        $i->action3();
    }
}

class B
{
    public function exec1(I $i)
    {
        $i->action1();
    }

    public function exec4(I $i)
    {
        $i->action4();
    }
    public function exec5(I $i)
    {
        $i->action5();
    }
    public function exec6(I $i)
    {
        $i->action6();
    }
}

class client
{
    public function run()
    {
        $A = new A();
        $A->exec1(new C);
        $A->exec2(new C);
        $A->exec3(new C);
        $B = new B();
        $B->exec1(new D);
        $B->exec4(new D);
        $B->exec5(new D);
        $B->exec6(new D);
    }
}

$client = new client();
$client->run();


4、与单一职责原则的区别

1、单一职责原则原注重的是职责;而接口隔离原则注重对接口依赖的隔离。
2、单一职责原则主要是约束类,其次才是接口和方法
3、它针对的是程序中的实现和细节;而接口隔离原则主要约束接口接口,主要针对抽象,针对程序整体框架的构建。

文章评论

看完文章了吗?谁便说点吧

发表 captcha

暂无评论