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.所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)