抽象工厂

来源:互联网 发布:论述题生成软件 编辑:程序博客网 时间:2024/06/17 14:21
抽象工厂,提供一个创建一系列相关或相互依赖对象的接口。
注意,是一系列,而不是一个对象。

不过还是需要在抽象工厂接口里,定义好需要实现的方法。不过同一系列中,需要在不同的方法中去实例功能类。

<?phpinterface People{public function work();}class Teacher implements People{public function work() {echo 'Teach stutents knowledge. ';}}//主任class Director implements People{public function work() {echo 'Teaching and charge of teachers. ';}}class Programmers implements People{public function work() {echo 'Write php codes. ';}}//经理class Manager implements People{public function work() {echo 'Coding and charge of programmers. ';}}//接口interface Factory{public function createEmployee();public function createLeader();}class TeacherFactory implements Factory{public function createEmployee() {return new Teacher();}public function createLeader() {return new Director();}}class ProgrammerFactroy implements Factory{public function createEmployee() {return new Programmers();}public function createLeader() {return new Manager();}}//client$teacher = new TeacherFactory();$teacher->createEmployee()->work();$teacher->createLeader()->work();$programmer = new ProgrammerFactroy();$programmer->createEmployee()->work();$programmer->createLeader()->work();

最后总结:
优点:
1. 符合开闭原则,新增加功能类,不用改变之前代码,可以动态扩展
2. 隔离了功能类的实例化过程。
缺点:
1. 新增功能的化,需要新增对应的一组工厂方法,工作量大
2. 如果要功能类内部调整或新加方法,那就需要代码全部改动了


一组功能类,就要写一个抽象工厂类,嫌多不?!
可以使用反射,简化处理。

<?phpinterface People{public function work();}class Teacher implements People{public function work() {echo 'Teach stutents knowledge. ';}}//主任class Director implements People{public function work() {echo 'Teaching and charge of teachers. ';}}class Programmer implements People{public function work() {echo 'Write php codes. ';}}//经理class Manager implements People{public function work() {echo 'Coding and charge of programmers. ';}}//反射class Factory{public function create($name) {$reflectionclass = new ReflectionClass($name);return $reflectionclass->newInstance();}}$factory = new Factory();$factory->create('Teacher')->work();$factory->create('Director')->work();$factory->create('Programmer')->work();$factory->create('Manager')->work();



1 0