工厂方法实现 – C.

工厂方法实现 – C.,第1张

概述我有“工厂”设计模式实现的以下代码. class Pen{public: virtual void Draw() = 0;};class RedPen : public Pen{public: virtual void Draw(){ cout << "Drawing with red pen" << endl; }};class B 我有“工厂”设计模式实现的以下代码.

class Pen{public:     virtual voID Draw() = 0;};class RedPen : public Pen{public:     virtual voID Draw(){         cout << "Drawing with red pen" << endl;     }};class BluePen : public Pen{public:     virtual voID Draw(){         cout << "Drawing with blue pen" << endl;     }};auto_ptr<Pen> createPen(const std::string color){     if(color == "red")         return auto_ptr<Pen>(new RedPen);     else if(color == "blue")         return auto_ptr<Pen>(new BluePen);}

但我听说可以使用“C模板”以更好的方式完成.任何人都可以帮助它如何完成以及模板方法如何比这更好?

有什么想法吗

解决方法 在您发布的示例中,工厂或模板方法对我来说都没有意义.
我的解决方案涉及Pen类中的数据成员.

class Pen {public:    Pen() : m_color(0,0) /* the default colour is black */    {                }    Pen(const color& c) : m_color(c)    {    }    Pen(const Pen& other) : m_color(other.color())    {    }    virtual voID Draw()    {        cout << "Drawing with a pen of color " << m_color.hex();    }    voID setcolor(const color& c) { m_color = c; }    const color& color() const { return m_color; }private:    color m_color;};class color {public:    color(int r,int g,int b,int a = 0) :        m_red(r),m_green(g),m_blue(other.blue()),m_Alpha(a)      {    }    color(const color& other) :         m_red(other.red()),m_green(other.green()),m_Alpha(other.Alpha())    {    }    int red() const { return m_red; }    int green() const  { return m_green; }    int blue() const { return m_blue; }    int Alpha() const { return m_Alpha; }    std::string hex() const    {        std::ostringstream os;        char buf[3];        os << "#";        sprintf(buf,"%2X",red());        os << buf;        sprintf(buf,green());        os << buf;        sprintf(buf,blue());        os << buf;        sprintf(buf,Alpha());        os << buf;        return os.str();    }private:    int m_red;    int m_green;    int m_blue;    int m_Alpha;}

当然,颜色类必须根据您使用的绘图API进行调整 – 也许比这个更先进(不同的颜色空间等).

为什么不模板?

使用模板没有意义的原因是(推测)不同绘图 *** 作之间的唯一区别是颜色变量.因此,通过使用模板(或手动声明不同的类,就像您所做的那样),您将复制类似的代码.这将使您的程序变大,并减慢它.

因此,绘制函数应该将颜色作为参数,或者(如我的示例中)将颜色作为类数据成员.

总结

以上是内存溢出为你收集整理的工厂方法实现 – C.全部内容,希望文章能够帮你解决工厂方法实现 – C.所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1223865.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存