•   欢迎来到21NN网.
  •   请记住本站网址www.21nn.cn

C++设想形式浅识工场要领形式【C#.Net教程】,C++,设计模式,工厂方法

摘要: 工场要领形式(FactoryMethod):定义一个用于建立对象的接口,让子类去实例化哪个类,工场要领使一个类的实例化延晚到其子类。与简朴工场的区分:简朴工场须要修正原有类,违犯了开闭准绳。...
工场要领形式(Factory Method):定义一个用于建立对象的接口,让子类去实例化哪个类,工场要领使一个类的实例化延晚到其子类。

与简朴工场的区分:简朴工场须要修正原有类,违犯了开闭准绳。而工场要领就防止类这个题目。坚持了封装对象的建立历程的长处,只需增添工场类就能够,处理了简朴工场分支推断的题目。

工场要领形式包括四个角色:

Product:笼统产物

ConcreteProduct: 详细产物

Factory: 笼统工场

ConcreteFactory: 详细工场

UML类图



在此以学雷锋为例,应用工场要领形式,将雷锋的要领视为笼统产物,对应笼统工场; 学雷锋的人视为详细产物, 对应详细工场。如要增加学雷锋的职员种别只需增加响应的类,而不须要修正原有类。

测试用例:

[code]int main(){
    //工场要领
    IFactory *factory = new UnderGraduateFactory;  //new一个大门生工场

    //建立学雷锋的门生
    LeiFeng *student = factory->createLeiFeng();

    //门生干了哪些雷锋要领
    student->BuyRice();  //买米
    student->Sweep(); //扫地
    student->Wash();  //洗濯   

    return 0;
}

雷锋类(笼统产物):

[code]class LeiFeng{
public:
    virtual void BuyRice(){
        std::cout << "Buy rice.\n";
    }
    virtual void Sweep(){
        std::cout << "Sweep.\n";
    }
    virtual void Wash(){
        std::cout << "Wash.\n";
    }
};

学雷锋的人(详细产物):

[code]class UnderGraduate: public LeiFeng{
};
//学雷锋的志愿者(详细产物)
class Volunteer: public LeiFeng{
};

雷锋工场类(笼统工场):

[code]class IFactory{
public:
    //建立学雷锋对象
    virtual LeiFeng* createLeiFeng(){
        return NULL;
    } 
};

学雷锋的对象工场(详细工场):

[code]class UnderGraduateFactory: public IFactory{
    LeiFeng* createLeiFeng(){
        return new UnderGraduate;
    }
};
class VolunteerFactory: public IFactory{
    LeiFeng* createLeiFeng(){
        return new Volunteer;
    }
};

以上就是C++设想形式浅识工场要领形式的内容,更多相关内容请关注ki4网(www.ki4.cn)!

分享到:

发表评论

评论列表

还没有评论,快来说点什么吧~

公众号二维码

微信公众号