关于面对对对象之接口的通俗理解

一些人写代码,按照计算机思考的那个模式写,写出来的代码,能实现功能,但是拓展性不好,而有些人写代码,是按照人看世界的那些思路去写,写出来的代码 看起来像那么回事儿,而且也非常的符合逻辑,这是为什么?为什么同样是写代码,为什么写出来的东西会完全不一样了?

最近一直在反思自己写的代码,以前写,都是为了完成某项功能而写,写完了也就完事儿了,可是最近却不是这样了,最近想打问题是,写代码是不是只要在实现功能的层面上就可以了了?后来得出的答案是,代码其实还可以写的更加的灵活多变一点的

那么今天我们就来谈谈关于这个写代码的技巧性的东西,我们经常在一些场合里面去使用面对对象的思想去编程,可是,在我真正的工作经验中所看到的却往往不是这样,他们很多的时候是打着面对对象的幌子却从事着面对过程编程的勾当。

我们来假设一下我们现在的一些个情景,很多人经常编写那种基于用户角色的管理系统,比如会员管理系统中的积分计算方式,比如A级别的会员,购买了B商品,他此时可以得到积分为C的相应积分,而B级别的会员,购买了B商品,他此时的到的积分为C+3的积分,那么我是试想一下,我么应该如何编写这种积分编写的规则了?

试想 我们如果使用我们最常见的那种方式,我们80%的情况下我们可能会这样写?

//伪代码
if(level==A){
    count(C);//计算A级别会员积分
}
if(level==B){
    count(+3)://计算B级别会员积分
}

按照以上的这种方式,随着等级增加,这样的判断类型会越来越多,这样的直接结果就是导致我们需要维护的文件会越来越多,代码也会越来越臃肿。最后代码就直接腐烂变质了

那么,另外的一种写法是怎么样了?

//伪代码
public interface IMember(){

    public double count(double value);
}

public class Amember implements IMember(){
    public double count(double value){
    
        value = value+C;
        return value;
    }
    
public class BMember impelents IMember(){
 
 public double count(double value){
    
        value = value+C+3;
        return value;
    }   
}

然后 我们只要根据登录的不同会员信息去产生不同的对象实例,调用同样的一个计算方式就好了。那么 这样 我们只需要在增加类的时候去添加对应的等级Member对象就可以了,这样我们就成功的将代码分开放置在了不同的类文件中,这样的话能够以最小的更改代价而完成最新的需求变更。

其实我想要表达的意思就是,如果想要用好面对对象的这个思维去编写程序,那么其实我们是有标准可以参照的。今天先只说一部分,以后再慢慢更。

首先要明白接口的使用,这个是面对对象当中最最最最重要的东西,没有之一。关于接口的书面描述,我就不想再多说了,各种参考书中都放置了相当多的描述,现在我主要是想说我对这个接口的理解和一些常见的疑惑问题解答。

1、在设计编码的书中中常常说起,要记住面对对抽象编程,而不是面对对具体实现编程?为什么

其实答案很简单,但是要想明白可能不是那么容易,我试着用最简单的方式去告诉你们怎么回事,接口当中,我们常常会写一些方法对吧。而且这些方法往往是没有任何实现的对吧?那么,那些数据中所说的面对抽象编程,其实就是指这个没有实现的方法编程。为什么?因为接口中定义的方法,他一定是抽象的 尽管你没有显示的说明他是抽象的,可是事实却是如此的。

而且,这些抽象的方法映射到我们的实际开发当中来说,这些个方式是一群对象所同时具有的一些个动作只是具体的实现不同而已,这样一说,你是不是就能够很好的明白了这个接口到底什么什么玩意,可以用来做什么? 面对对象的面对抽象编程就是这么个道理和内涵。

其实你可以发现好多设计精良的架构设计,你会发现里面有一堆的接口,然后有很多的类结构会去实现这样的接口,从而使得自己能够拥有一些个能够供自己使用的方法,所以在此我推荐的是,所有类中除了类本身所有用的一些类似于辅助的方法之外,其他的方法最好全部放到各个接口当中去实现最好,因为这样维护的成为最低,修改的代码成本最小

其实很多人在编写代码之前的时候会时刻提醒自己 我们不能按照面对过程的方式来编写代码,但是一旦项目开动了,这些基本都不靠谱了。为什么了,因为他脑子里的潜意识永远没有去想,我这个方法到底是从哪儿来的?所以我给大家提的建议是思考如下三个问题,在你编写一个类的时候!

1、我的类是JAVABean么?这个里面除了getter,setter方法之外,其他的不要放

2、我的类中的方法是从某个接口中实现而来的么?不过建议先思考这样的问题在决定你的方法的来源,这样会更加省事儿的,血的教训

3、停顿60秒,然后再问自己以上的这两个问题

说一千到一万,其实接口就解决了一个问题,那就是很多动作的共性问题,简单点就是说,A有呼喊的技能,B也有呼喊的技能,不过A只会呼喊A语言,B会呼喊B语言的,那么假如我们使用了接口,则自动的屏蔽了具体的实现。这样就到达了多态(也就是对象实例为A时,A开始呼喊,对象实例为B时,B还是呼喊)。

在直白一点我们可以这样理解,接口其实就是一个领导,他只能在哪儿交换,从来不会去管下面如何实现的,他只要结果,所以,实现接口的类就像是领导直接管辖的下属,你只要按照他的大方向去做,然后告诉领导结果就够了。具体你怎么去做,就i自己想去吧...领导从来不会问你技术细节,因为他有自己有自己的宏(SHA)伟(BI)蓝(YI)图(GE)

啰嗦几句,编程需要技巧和思维,不过在这里在澄清一个误区,那就是业界流传着一句话说“多写多练”你就能成为大牛?我谢谢你,代码多写多看,而不去多想,你永远就是一个熟练工,一个CODER,而不是DEVELOPER好么。所以奉劝各位看到此文章的博友们,谨记着一句话,“多写多练变大牛”是有前提条件的好么,一定是要在“多想多总结”的基础上完成!!任何的语句有意义都是会有上下文语境的,这就是设计的哲学。

关于面对对对象之接口的通俗理解

时间: 2024-12-30 03:28:32

关于面对对对象之接口的通俗理解的相关文章

在Unity中定义统一的对象搜索接口

我们经常要在Unity中以各种方式搜索对象.比如按名字搜索.按tag.layer或者是查找名字为xxx开头的对象. 本文是介绍以一种统一的接口来搜索对象. 1.定义统一的搜索接口 /// <summary> /// 游戏对象搜索接口 /// </summary> public interface IGameObjectFinder { /// <summary> /// 搜索 /// </summary> /// <param name="r

PHP 面向对对象基础(接口,类)

介绍PHP面向对象的基础知识 1. 接口的定义interface ,类定义class,类支持abstract和final修饰符,abstract修饰为抽象类,抽象类 不支持直接实例化,final修饰的类/方法不能被继承/方法重写.2. 接口的实现通过implements,类继承extends interface IShape{ function draw_core(); }; class PathShape implements IShape{ public function draw_core

父类的引用指向子类的对象或者接口指向实现类均是可以的

父类的引用指向子类的对象或者接口指向实现类均是可以的. 例如(下图为父类的引用指向子类的对象) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 public class Father {         public void pri() {             System.out.println("father");         } } public class Sun   extends  Father{       public void 

Kotlin基础(三)类、对象和接口

类.对象和接口 一.定义类的继承结构 一)Kotlin中的接口 Kotlin的接口与Java8中相似,它们可以包含抽象方法的定义以及非抽象方法的实现,但它们不能包含任何状态. 1 interface Clickable{ 2 fun click() 3 fun showoff()=println("It's show time!") 4 } 5 6 interface Focusable{ 7 fun setFocus(b: Boolean)= 8 println("I ${

设计模式之适配器模式 adapter 适配器模式分类概念角色详解 类适配器 对象适配器 接口适配器 双向适配器

现实世界中的适配器模型 先来看下来几个图片,截图自淘宝 上图为港版的插头与港版的插座 上图为插座适配器卖家的描述图 上图为适配后的结果 现实世界中适配器模式 角色分类 这就是适配器模式在电源插座上的应用 我们看下在插座适配器中的几个重要角色 可以看得出来,大陆和港版插座面板,都是作为电源的角色,他们的功能是相似的或者说相近的 插头要使用插座,进而接通电流 现实世界到代码的转换 电源插座代码示例 港版插座面板 package adapter; /**目标角色 Target 接口 * 香港地区使用的

对象序列化原因的简单理解

序列化和反序列化我们可能经常会听到,其实通俗一点的解释,序列化就是把一个对象保存到一个文件或数据库字段中去,其最终目的都是将内存中的对象持久化或者是在网络上传输.反序列化就是在适当的时候把这个文件再转化成原来的对象使用. 使用序列化的原因 a. 一个原因是将对象的状态保持在存储媒体中,以便可以在以后重新创建精确的副本.我们经常需要将对象的字段值保存到磁盘中,并在以后检索此数据.尽管不使用序列化也能完成这项工作,但这种方法通常很繁琐而且容易出错,并且在需要跟踪对象的层次结构时,会变得越来越复杂.可

网络七层协议的通俗理解

OSI七层模式简单通俗理解 这个模型学了好多次,总是记不住.今天又看了一遍,发现用历史推演的角度去看问题会更有逻辑,更好记.本文不一定严谨,可能有错漏,主要是抛砖引玉,帮助记性不好的人.总体来说,OSI模型是从底层往上层发展出来的. 这个模型推出的最开始,是是因为美国人有两台机器之间进行通信的需求. 需求1: 科学家要解决的第一个问题是,两个硬件之间怎么通信.具体就是一台发些比特流,然后另一台能收到. 于是,科学家发明了物理层: 主要定义物理设备标准,如网线的接口类型.光纤的接口类型.各种传输介

如何通俗理解设计模式及其思想

术与道 数据结构,算法,设计模式被认为是程序员必备技能的三叉戟,如果说编程语言的语法特性和业务编码能力是[术],那么这三者可以称得上是[道]--[术]可以让你在IT行业赖以生存,而[道]则决定你未来在技术这条道路上可以走多远. 边学边忘的窘境 先自我介绍一下. 我是一个两年工作经验的Android开发人员,就像很多同行一样,对于数据结构,算法,设计模式这些被奉为程序员必修的三门内功,几乎没有去系统性地学习过(曾经专业课的数据结构,如今也基本还给了老师). 你问我想不想当一个称职的程序员,当然!数

通俗理解数据库隔离机制

=========================================== 原文链接: 通俗理解数据库隔离机制   转载请注明出处! =========================================== 在理解数据库隔离机制的时候发现网上很多文章都是千篇一律,解释语言太过于标准书面化,描述的晦涩难懂,因果关系模糊.在这里将自己对隔离机制的理解描述一下,力争做到能够通过浅显的语言描述出来. 数据库隔离机制是对于多线程同时操作数据库而言的.对于单线程操作数据库不存在所谓