По последним данным, на рынке продается по крайней мере 2 768 942 книги о С++, не говоря уже о всевозможных курсах, обучающих программах, журналах и семинарах с коктейлями. И все же в этом изобилии наблюдается удручающее однообразие.
Раз вся эта бурная деятельность сконцентрирована вокруг объекта View, то как убрать его подальше от глаз широкой публики? Собственно, это считалось одним из достоинств интерфейсных указателей, не правда ли? Еще раз посмотрите на кристалл вида. Так ли уж необходимо пользователю видеть указываемый объект при использовании этой стратегии? В действительности ему хватит возможности создавать кристаллы, которые, в свою очередь, будут использоваться для получения необходимых граней. Когда это будет сделано, грани и кристаллы можно поместить в файл .h и скрыть указываемый объект в файле .срр.
Такой вариант особенно хорошо работает в сочетании с другими идиомами. С переходными типами указываемые объекты можно менять во время выполнения программы. Гомоморфные иерархии классов позволяют использовать один набор граней для организации интерфейса к деревьям семейств производных или перекомпонованных (recomposed) классов указываемых объектов. Ведущие указатели помогают соблюсти некоторые из правил согласованности, о которых будет рассказано позже.
Просматривать полку книг о С++ в книжном магазине ничуть не интереснее, чем литературу по бухгалтерии. В сущности, все книги пересказывают одно и то же и отличаются разве что по весу и количеству цветов в диаграммах и таблицах.