面向对象:设计中的思考

栏目: 后端 · 前端 · 发布时间: 6年前

内容简介:设计接口需传入某类型变量的时候,不将变量声明为某个特定得具体类的实例对象,而是让它遵从抽象类所定义的接口。如下:比如我们现在需要设计一个

设计接口需传入某类型变量的时候,不将变量声明为某个特定得具体类的实例对象,而是让它遵从抽象类所定义的接口。

如下:

比如我们现在需要设计一个 doSomething 接口,需要接受一个变量,去为我们做一些不确定的操作。

// 设计
class ConcreteClass {
};

class InterfaceClass {
public:	
  static void doSomething(ConcreteClass*);
};

// 使用
ConcreteClass instance = new ConcreteClass;
InterfaceClass::doSomething(instance);

以上设计具有局限性,首先,对于 doSomething 我们并不知道内部如何实现,因为面向对象的思想就是封装,意思就是具有封闭性,当我们传入具体对象 ConcreteClass 的时候就绑定了该接口,以后只能在 ConcreteClass 进行拓展开发,我们无法传入其他类对象实例。也就是说,我们只能使针对 ConcreteClass 的实现进行编程的。

那么,针对接口编程又是什么意思?

class AbstractClass {
public:
  virtual void abstractFeature() = 0;
};

class ConcreteClass : public AbstractClass {
};

class InterfaceClass {
public:
  static void doSomething(AbstractClass*);
}

// 使用
ConcreteClass instance = new ConcreteClass;
InterfaceClass::doSomething(instance);

以上这段代码,我们改动了小许,通过一个抽象基类,也就是一个接口类来为我们提供接口,我们设计的 doSomething 接口所做的操作,就是依赖于这个接口类中的接口去操作。

这样写,虽然有了小许面向接口编程的概念,但是从中我们还是依赖于必须实例化 ConcreteClass 对象,当客户操作时,必须投入精力去理解 ConcreteClass 的”真正含义”,还会存在由于用户操作不当破坏 instance 的结构性的可能。

如何更面向接口编程?

class AbstractClass {
public:
  virtual void abstractFeature() = 0;
};

class ConcreteClass : public AbstractClass {
};

class Factory {
public:
  static AbstractClass createInstance(int type);
};

class InterfaceClass {
public:
  static void doSomething(AbstractClass*);
}

// 使用
AbstractClass instance = Factory::createInstance(1);
InterfaceClass::doSomething(instance);

以上代码通过加入创建型模式中的工厂模式来为用户提供创建 doSomething 接口所需对象的接口,用户只需要通过具体类型 type 来控制所需要的事件类型,便可以调用接口。留给客户操作得越少,保证出错得几率就约小。

那么定义接口有什么法则?

  1. 客户无须知道它们使用对象的特定类型,只须对象有客户所期望的接口。
  2. 客户无须知道他们使用的对象使用什么类来实现,他们只须知道定义接口的抽象类。

好处:

极大地减少子系统实现之间的相互依赖关系,也产生了可复用的面向对象设计原则

针对接口编程,而不是针对实现编程


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Tensorflow:实战Google深度学习框架

Tensorflow:实战Google深度学习框架

郑泽宇、顾思宇 / 电子工业出版社 / 2017-2-10 / 79

TensorFlow是谷歌2015年开源的主流深度学习框架,目前已在谷歌、优步(Uber)、京东、小米等科技公司广泛应用。《Tensorflow实战》为使用TensorFlow深度学习框架的入门参考书,旨在帮助读者以最快、最有效的方式上手TensorFlow和深度学习。书中省略了深度学习繁琐的数学模型推导,从实际应用问题出发,通过具体的TensorFlow样例程序介绍如何使用深度学习解决这些问题。......一起来看看 《Tensorflow:实战Google深度学习框架》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具