抽象工厂
来源:互联网 发布:论述题生成软件 编辑:程序博客网 时间: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
- 抽象工厂
- 抽象工厂
- 抽象工厂
- 抽象工厂
- 抽象工厂
- 抽象工厂
- 抽象工厂
- 抽象工厂
- 抽象工厂
- 抽象工厂
- 抽象工厂
- 抽象工厂
- 抽象工厂
- 抽象工厂
- 抽象工厂
- 抽象工厂
- 抽象工厂
- 抽象工厂
- 奶爸纪实--要不要打乙肝免疫球蛋白?如何打才是正确的打法?
- 【图论】匈牙利算法与KM算法(寻找二部图最佳匹配与最佳完备匹配)
- NGINX 调试
- 一站式登录授权系统(单点登录+授权管理)
- php 安装 mongodb扩展
- 抽象工厂
- 高并发下的读服务
- 《ACM程序设计》专题总结
- ACM
- 计算机网络面试考点
- JavaWeb——新建项目与新建servlet
- javaweb学习笔记(佟刚老师笔记)
- JavaScript正则表达式
- java 学习笔记1