解决方案 »

  1.   

    给你个 史上最牛的"工厂模式"入门教程 , 幸亏我收藏了
      
    http://bbs.csdn.net/topics/390894957强悍的不需解释
      

  2.   

    1.你的工厂模式有些地方是错误的
    <?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();
    }
      

  3.   

    工厂模式定义:实例化对象,用工厂方法代替new操作也就是说,除了工厂(Factory)类以外,其他地方都不应出现 newinterface 是接口
    只要实现了(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();