解决方案 »
- 正则抓取团购网站内容(会php Snoopy类的最好,不会也不影响)
- 一个看似简单的有趣问题,有多少人会?
- 用jquery-dynamic-form插件时上传的文件怎么获取?
- 为什么图片不滚动
- 一个解决不了的问题????//////
- 函数前面加个引用符号是啥意思?
- 菜鸟:PHP Startup:Unable to load dynamic library'D:\php\ext\php_mysql.dll'-找不到指定的程序。QQ:13628198
- thinkphp分页和跳页
- 为什么我的php文件生成的验证码图片在浏览器不显示
- php屏蔽百度网页,移动端搜索的来源
- 新手 左侧和顶部的 页面找不到
- Session问题
http://bbs.csdn.net/topics/390894957强悍的不需解释
<?php//抽象产品
interface Work {
public function doWork();
}//具体产品实现
class Student implements Work { function doWork(){
echo "学生做作业!\n";
}
}class Teacher implements Work { function doWork(){
echo "老师批改作业!\n";
}
}//抽象工厂
interface WorkerFactory {
public function getWorker();
}//具体抽象工厂实现
class StudentFactory implements WorkerFactory { function getWorker(){
return new Student();
}
}class TeacherFactory implements WorkerFactory {
function getWorker(){
return new Teacher();
}
}//客户端
class Client { static function main() { $s = new StudentFactory(); $s->getWorker()->doWork(); $t = new TeacherFactory(); $t->getWorker()->doWork();
}
}Client::main();
?>2.PHP来学习工厂模式是相当不适合的 因为是弱类型 下面是改写成的C++/*
* share.cc
*
* Created on: 2014年9月30日
* Author: shikiliu
*/#include <iostream>using namespace std;class Work{public:
virtual void doWork()=0; virtual ~Work(){}
};
class WorkerFactory{public:
virtual Work* getWorker()=0;
virtual ~WorkerFactory(){}
};class Student:public Work{public:
void doWork(){
cout<<"Student doWork"<<endl;
}
~Student(){ }};
class Teacher:public Work{
public:
void doWork(){
cout<<"Teacher doWork"<<endl;
}
~Teacher(){ }};class StudentFactory: public WorkerFactory{
public:
Work* getWorker(){
return new Student();
}
~StudentFactory(){ }};class TeacherFactory:public WorkerFactory{
public:
Work* getWorker(){
return new Teacher();
}
~TeacherFactory(){ }
};WorkerFactory *getFactory(){ return new StudentFactory();
}/**********以上为工厂模式 下面为使用的客户***********/void client(){ WorkerFactory *factory = getFactory();
Work* work = factory->getWorker();
work->doWork();
delete factory;
delete work;
}int main() {
client();
}
当我们新增校长以后 客户端的程序不需要修改 只需要增加代码成下面这个样子
#include <iostream>using namespace std;class Work{public:
virtual void doWork()=0; virtual ~Work(){}
};
class WorkerFactory{public:
virtual Work* getWorker()=0;
virtual ~WorkerFactory(){}
};class Student:public Work{public:
void doWork(){
cout<<"Student doWork"<<endl;
}
~Student(){ }};
class Teacher:public Work{
public:
void doWork(){
cout<<"Teacher doWork"<<endl;
}
~Teacher(){ }};class Schoolmaster:public Work{
public:
void doWork(){
cout<<"Schoolmaster doWork"<<endl;
}
~Schoolmaster(){ }
};class StudentFactory: public WorkerFactory{
public:
Work* getWorker(){
return new Student();
}
~StudentFactory(){ }};class TeacherFactory:public WorkerFactory{
public:
Work* getWorker(){
return new Teacher();
}
~TeacherFactory(){ }
};
class SchoolmasterFactory:public WorkerFactory{
public:
Work* getWorker(){
return new Schoolmaster();
}
~SchoolmasterFactory(){ }
};
WorkerFactory *getFactory(){ return new SchoolmasterFactory();
}/**********以上为工厂模式 下面为使用的客户***********/void client(){ WorkerFactory *factory = getFactory();
Work* work = factory->getWorker();
work->doWork();
delete factory;
delete work;
}int main() {
client();
}
只要实现了(implements)该接口的类,都可以通过接口中声明的方法进行沟通。而与类本身无关//动作接口
interface Work {
public function doWork();
}
//学生
class Student implements Work {
function doWork(){
echo "学生做作业!\n";
}
} //老师
class Teacher implements Work {
function doWork(){
echo "老师批改作业!\n";
}
}
//工厂
class Factory {
static function create($what){
return new $what();
}
}
//客户端
class Client {
static function main() {
Factory::create('student')->doWork();
Factory::create('teacher')->doWork();
}
}
Client::main();