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

一些人写代码,按照计算机思考的那个模式写,写出来的代码,能实现功能,可是拓展性很差,而有些人写代码,是按照人看世界的那些思路去写,写出来的代码 看起来像那么回事儿,并且也很是的符合逻辑,这是为何?为何一样是写代码,为何写出来的东西会彻底不同了?java


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

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

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

试想 咱们若是使用咱们最多见的那种方式,咱们80%的状况下咱们可能会这样写?架构设计

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

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

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

//伪代码
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对象就能够了,这样咱们就成功的将代码分开放置在了不一样的类文件中,这样的话可以以最小的更改代价而完成最新的需求变动。对象

其实我想要表达的意思就是,若是想要用好面对对象的这个思惟去编写程序,那么其实咱们是有标准能够参照的。今天先只说一部分,之后再慢慢更。接口

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

一、在设计编码的书中中经常提及,要记住面对对抽象编程,而不是面对对具体实现编程?为何

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

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

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

其实不少人在编写代码以前的时候会时刻提醒本身 咱们不能按照面对过程的方式来编写代码,可是一旦项目开动了,这些基本都不靠谱了。为何了,由于他脑子里的潜意识永远没有去想,我这个方法究竟是从哪儿来的?因此我给你们提的建议是思考以下三个问题,在你编写一个类的时候!

一、个人类是JAVABean么?这个里面除了getter,setter方法以外,其余的不要放

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

三、停顿60秒,而后再问本身以上的这两个问题

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

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


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

相关文章
相关标签/搜索