面向对象的好处

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

提到面向对象的好处一些人脑中可能会冒出封装继承多态封装

封装通过类为数据和方法提供统一的上下文
但是函数名同样也可以提供上下文并且可以通过一种叫柯里化的技巧保存某些字段从而实现类中成员变量的效果

面向对象在封装中没有体现出明显的优势 😔

继承其本质为复用而通过函数也可以实现复用 😔

最后是多态相同的接口不同的行为
比如一个计算器的例子

public interface Operation {    int operate(int a, int b);    }

public class Add implements Operation {    public int operate(int a, int b) {    return a + b;    }    }
public class Sub implements Operation {    public int operate(int a, int b) {    return a - b;    }    }
public class Mul implements Operation {    public int operate(int a, int b) {    return a * b;    }    }
public class Div implements Operation {    public int operate(int a, int b) {    return a / b;    }    }

// 工厂模式可以将创建对象逻辑与具体业务逻辑进行分离
public class OperationFactory {  
   static Map<String, Operation> opMap = new HashMap<>();  
   static {  
      opMap.put("add", new Add());  
      opMap.put("sub", new Sub());  
      opMap.put("mul", new Mul());  
      opMap.put("div", new Div());  
   }  
   public static Operation getOp(String op) {  
      return opMap.get(op);  
   }  
}

使用方式

public static void main(String[] args) {  
   Operation op = OperationFactory.getOp("add");  
   Integer res = Main.calculate(op, 1, 2);  
   System.out.println(res);  
}  
  
public static Integer calculate (Operation op, int a, int b) {  
   return op != null ? op.operate(a, b): null;  
}

在 Javascript 中你同样可以将运算逻辑存储到 map 中

const opMap = {
  add: (a, b) => a + b,
  sub: (a, b) => a - b,
  mul: (a, b) => a * b,
  div: (a, b) => a / b
};

const op = opMap['add'];
const res = op(1, 2);
console.log(res);

区别就在于一个存储的是对象类的实例另一个存储的是函数
但是对象所具有的上下文字段、方法主要是字段更加明显
这里好像还看不出多态的所具有哪些明显的好处

接口当作参数

接口当作参数相同功能可有不同实现从而达到动态替换
动态替换的好处在使用函数时可以将变与不变进行隔离从而达到函数的复用这一点已经在 calculate 函数中看到了
变化的东西进行抽取出来的好处类比于拼积木将具有相同功能但可以有不同的实现的对象拼接到一起

独立开发只关注业务逻辑

对象存在的目的是为了完成某项功能
一个对象如果可以完成某个功能的但具有前提该前提是借助依赖另一个东西否则无法做到巧妇难为无米之炊

如果我不依赖于具体实现而是依赖于接口呢
那么这意味着可以独立开发 ⭐️

在函数中调用接口的方法我不关心接口内的方法是如何实现的接口内的方法留着别人来实现吧~

就像访问数据库我要获取某个表的所有字段然后对这些字段进行操作
获取所有字段的逻辑定义为一个接口 getAll()至少具体实现我不关系交给下层去做吧~ 用的是 Mysql 还是 Oracle我也不关系因为我可以对下层的实现进行替换

使得我可以只关注于业务逻辑⭐️⭐️⭐️独立开发⭐️并且将对象当作拼积木一样进行拼接完成想要的功能

在这里插入图片描述

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6