设计模式六大原则单一职责原则(SRP)定义:一个类应该只有一个改变的原因假设有一个类N,它负责两个职责,Z1和Z2。假设职责Z1发生变化,需要修改N类,修改N类可能会导致Z2无法正常运行。在系统中,一个类承担的职责越多,它被重用的次数就越多。可能性肯定更小。您承担的责任越多,就越容易将这些责任结合在一起。这时,一旦某个职责发生变化,就可能影响其他职责的正常运行。因此,可以将不同的职责分离出来,封装到不同的类中。单一职责原则可以说是实现高内聚低耦合的指南。显示代码firstSkill();}elseif($hero=='mengYa'){$obj=newMengya();$obj->firstSkill();}}publicfunctionSecondSkill($hero){if($hero=='baiLi'){$obj=newBaili();$obj->SecondSkill();}elseif($hero=='mengYa'){$obj=newMengya();$obj->SecondSkill();}}publicfunctionThirdSkill($hero){...}}classBaili{publicfunctionfirstSkill(){echo"百里技能之一";}publicfunctionSecondSkill($hero){echo"百里第二技能";}publicfunctionThirdSkill($hero){echo"百里的第三技能";}}classMengya{publicfunctionfirstSkill(){echo"蒙哥亚的第一技能";}publicfunctionSecondSkill($hero){echo"蒙哥亚的第二技能";}publicfunctionThirdSkill($hero){echo"Mongoya的第三技能";}}以上方式,如果我现在要添加英雄,需要修改Shooter的三个方法(shooterclass)类并增加新的判断逻辑,违反了开放封闭原则。现在抽象射手类shooter=$shooter;}publicfunctionfirstSkill(){$this->shooter->firstSkill();}}classBailiextendsShooter{publicfunctionfirstSkill(){echo"百里第一技能";}publicfunctionSecondSkill(){echo"百里第二技能";}publicfunctionThirdSkill(){echo"百里第三技能"技能";}}classMengyaextendsShooter{publicfunctionfirstSkill(){echo"蒙哥亚一技能";}publicfunctionSecondSkill(){echo"蒙哥亚二技能";}publicfunctionThirdSkill(){echo"蒙哥亚三技能";}}$obj=newOperateShooter();$obj->setShooter(newBaili());$obj->firstSkill();输出:百里第一个技能被重构封装了一个抽象类(Shooter),OperateShooter操作在抽象类上射手的设置。通过setShooter()方法,用户可以设置并实例化一个特定的射手英雄对象,并通过Operat的firstSkill()方法调用传入的eShooter对象的firstSkill()方法假设此时添加了一个新的射手英雄。只需要从射手抽象类(Shooter)继承新的射手英雄即可。使用这个新英雄的技能时,直接在OperateShooter类中注入一个新的射手英雄。英雄的对象就够了,这样就不用改现有类的代码了
