解决方案 »
- 帮忙看看 这个错误在哪里 如何转换页面?
- 日期显示格式的问题(急!!!)
- 请问,用PHP或者其他技术,怎样令服务器定时执行一个文件?
- 不报错,直接死掉为啥呢
- PHP正则表达式IMG标签转换问题,谢谢!!
- 使用AJAX加载的页面的JS无效?寻求解决办法
- 一下程序原本可以登录,为啥我加了自动登录部分(前面1-15行),系统检测不到用户资料后不显示登录界面出来,请帮忙看看,多谢了
- 目录属性改为 777,否则无法继续安装 是什么意思呢
- 遇到一个php版本的问题
- html建的文本框,在当前文件中,写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();