基本模式是复杂类的抽象和实现分开,这样抽象和实现可以相互独立,各自演进发展:
类似于:
sruct Impl;
struct ComplexClass
{
virtual void interface1();
virtual void interface2();
virtual void interface3();
Impl * getImpl();
private:
Impl *impl;
}
抽象的演进:
struct oneRefinedClass : ComplexClass
{
interface4();
}
实现的演进:
struct oneRefinedImpl :Impl
{
}
优势:
1 对客户不暴露实现。
2 抽象和实现相互独立,不相互依赖。
3 确定使用什么实现可通过抽象工厂生产,彻底解除两者的依赖。
4 IMPL可以仅仅为某个具体的RefinedImpl类使用。