前篇文章,我们完成了概念抽象面向对象设计(Object-Oriented Design)后形成的不同类族(类层次),而在实际使用中,我们必然要将抽象类由具体类来实例化来取代完成细节内容的操作。因此,创建(实例化)具体类就是面向对象技术中必不可少的重要一环。
而面向过程程序中,我们直接开发依赖于具体的细节代码,因此也就不存在实例化概念的需求;而面向对象编程让我们仅仅引用对象的抽象意义,而不必考虑它的具体类型,也就是说在任何时候我们用到对象,都应该隐藏(封装)它涉及的具体实现,更进一步的讲,我们还要隐藏(封装)它涉及的具体类型,从而达到更好的替代扩展性,这也就引出了对象的使用视角和创建视角。
创建视角,我们要根据某些条件、策略来实现具体的某种特定类型的创建,并通过客户代码的属性设置(Setter)将特定类型注入到概念角色类中。并且往往是一组同类型的具体体实现同样的职能,因此往往配合的插件结构予以提供必要的扩展性。
使用视角,在使用时,我们应用依赖抽象的DIP原则,使用的都是抽象的类型和公共的接口方法,从而使得高层模块间的策略得到复用,从而达到框架复用的核心,实现代码的规模经济效益。
因此,创建视角和使用视角是两个不同变化的维度,当客户代码中使用和创建一起使用时,当某一个维度发生变化时,必然引起客户代码的修改,也就违反了面向对象设计原则中(SRP)单一职责原则。这一点我们在上篇博文中设计指标类(Specification.lvclas