`
wnzz95391511
  • 浏览: 124728 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

设计原则之面向接口编程

阅读更多
面向对象设计中有这样一个原则:
针对接口编程,而不是针对实现编程,也就是针对抽象编程。

我是这样理解它的,举个例子:

假设,现在要实现一个装动物的笼子,里面要放置一个狗。那么我们可以这样写代码:
狗的实现类 Dog.java
public class Dog{
    public void talk(){
        System.out.println("Dog talk");
    }
}


笼子的实现类 Cage.java
public class Cage{
    private Dog dog;

    public Cage(Dog dog){
        this.dog = dog;
    }

    public void talk(){
        this.dog.talk();
    } 
}

客户端代码 Client.java
public class Client{

     public static void main(String[] args){
            Dog dog = new Dog();
            //向笼子里加入狗
            Cage cage = new Cage(dog);

            //笼子里的动物说话
            cage.talk();
     }

}


这样的话,针对这个需求,我们很完美的完工了!实现了所需要的功能。
但是如果现在需求变了呢,想向笼子里加上一只猫,而不是一只狗。
从直观的角度考虑,我们就是更改Cage类中定义的Dog对象,将其全都换成Cat对象。
换个角度,将Dog 和 Cat 抽象出共用的接口,用于复用。

新改变的代码如下:
新定义的 动物接口 Animal.java
public interface Animal{

      public void talk();
}


定义Cat类,实现此接口   Cat.java
public class Cat implements Animal{
    
     public void talk(){
         System.out.println("Cat talk");
     }

}

Dog类也改为实现Animal接口,这里就不再写出了
Cage类更改如下
public class Cage{
    private Animal animal;

    public Cage(Animal animal){
        this.animal = animal;
    }

    public void talk(){
        this.animal.talk();
    } 
}


这样,就可以在客户端实现将Cat或Dog加入到笼子里了
public class Client{

     public static void main(String[] args){
            Dog dog = new Dog();
            Cat cat = new Cat();
            //向笼子里加入狗
            //Cage cage = new Cage(dog);
            //或向笼子里加入猫
            Cage cage = new Cage(cat);
            
            //笼子里的动物说话
            cage.talk();
     }
}


这样就可以实现了代码的复用,以后再改需求,加入别的动物,对于Cage也可以不需要进行改变。
  • 利用第一种形式定义Cage,即是面向实现编程,是在编译时确定笼子与具体动物的关系。
  • 利用第二种形式定义Cage,抽象出Animal,即是面向接口编程,是在运行时确定笼子与具体动物的关系。当在客户端运行时加入Dog,则笼子里放入的是Dog,当在客户端运行时加入Cat,则笼子里放入的是Cat。


算是自己对面向接口编程的一点体会吧~
0
0
分享到:
评论

相关推荐

    Java语言:什么叫面向接口编程

    Java语言:什么叫面向接口编程 非接口编程?是不是就是面向过程的编程思想?  1.关于接口的理解。  接口从更深层次的理解,应是定义(规范,约束)与实现(名实分离的原则)的分离。  我们在一般实现一个系统的...

    JAVA设计模式六大原则详细讲解(面向对象语言通用)

    3.依赖倒置原则:面向接口编程 4.接口隔离原则: 客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。 5.迪米特法则还有一个更简单的定义:只与直接的朋友通信。其中,我们称出现成员...

    面向对象设计原则源码及文档

    面向对象设计原则是OOPS(Object-Oriented Programming System,面向对象的程序设计系统)编程的核心。在设计面向对象的程序的时,模式不是一定要套的,但是有一些原则最好是遵守。这些原则已知的有七个,包括:单一...

    面向对象编程中“粒度”的概念

    面向对象编程中“粒度granularity”的概念

    Java面向对象程序设计杨晓燕面向对象基本原则和模式.pptx

    接口的UML表示 第5页/共30页 Java面向对象程序设计杨晓燕面向对象基本原则和模式全文共30页,当前为第5页。 依赖关系:虚线+箭头 第6页/共30页 Java面向对象程序设计杨晓燕面向对象基本原则和模式全文共30页,当前...

    Java设计模式-面向对象七大设计原则

    例如:随着计算机的不断发展,程序学习这门技术也越来越重要,很多人都开启了...面向对象设计原则一共有七个:开闭原则、里氏替换原则、依赖倒转原则、单一职责原则、接口隔离原则、组合/聚合复用原则、迪米特法则。

    24种设计模式介绍与6大设计原则

    里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能...

    38丨 总结回顾面向对象、设计原则、编程规范、重构技巧等知识点1

    1. 面向对象概述 2. 面向对象四大特性 3. 面向对象 VS 面向过程 4. 面向对象分析、设计与编程 5. 接口 VS 抽象类 6. 基于接口而非实现编程

    src.zip Java的面向对象编程·讲解代码

    通过这段代码源码资源,目标是提供一个清晰而易懂的示例,帮助学习者更好地理解Java中的面向对象编程原则和概念。它将演示如何创建类和对象,如何定义和使用继承关系,如何利用封装实现数据隐藏,以及如何利用多态...

    Java语言面向对象上册教程

    1. 面向过程编程 2 2. 面向对象编程 4 3. 面向对象的术语 6 4. 如何设计类 8 5. 内存模型 11 6. 案例 13 7. 方法 20 8. 方法的重载 26 9. 可变长度数组 33 10. 方法的递归调用 34 ...16.5 面向接口编程 154

    SunshlnW#Design-Mode#面向对象设计原则1

    面向对象设计原则常见原则依赖倒置原则(DIP)高层模块(稳定)不应该依赖于低层模块(变化),二者都应该依赖于抽象(稳定)。封装变化点使用封装来创建对象之间的分界

    写给大家看的面向对象编程书(第3版).[美]Matt Weisfeld(带详细书签).pdf

    第8章 框架与重用:使用接口和抽象类实现设计 119 8.1 代码:重用还是不重用 119 8.2 什么是框架 119 8.3 什么是契约 121 8.3.1 抽象类 122 8.3.2 接口 124 8.3.3 集成 125 8.3.4 编译器的证明 127 8.3.5 ...

    软件设计师61条面向对象设计的经验原则(1).

    软件设计师61条面向对象设计的经验原则(1).(1)所有数据都应该隐藏在所在的类的内部。  (2)类的使用者必须依赖类的共有接口,但类不能依赖它的使用者。    (3)尽量减少类的协议中的消息。    (4)实现所有类都...

    写给大家看的面向对象编程书(第三版)

    第5章 类设计指导原则 第6章 利用对象实现设计 第7章 掌握继承和组合 第8章 框架与重用:使用接口和抽象类实现设计 第9章 构建对象 第10章 用UML创建对象模型 第11章 对象和可移植数据:XML 第12章 持久对象...

    设计模式总结

    面向接口编程。细节应该依赖抽象。 依赖可以传递。 依赖有三种方式进行传递: 1. 构造函数传递依赖对象 2. setter方法传递依赖对象 3. 接口注入依赖对象 接口隔离原则 接口尽量细化,方法尽量少 迪米特...

    敏捷软件开发:原则、模式与实践.pdf

     ●面向对象设计原则:本书包含了11个面向对象设计原则,涵盖了包的设计和类的设计。这是我所见过的对这方面内容讲解的最清晰、最彻底、最深刻的唯一的一本书。  ●设计模式:本书中讲述了23个设计模式,并都有...

    深入理解JavaScript系列.chm

    18.面向对象编程之ECMAScript实现 19.求值策略 20.《你真懂JavaScript吗?》答案详解 21.S.O.L.I.D五大原则之接口隔离原则ISP 22.S.O.L.I.D五大原则之依赖倒置原则DIP 23.JavaScript与DOM(上)——也适用于新手 24....

    JAVA面向对象详细资料

    35面向对象设计原则 54 1、找出应用中可能需求变化的代码,把它们独立出来,不要和那些需求不变化的的代码混在一起 54 2、针对接口编程,而不要针对实现类编程 54 3、多用组合,少用继承(包含实现) 54 4、为了交互...

    设计模式(五)之依赖倒转原则.zip

    依赖倒置原则的包含如下的三层含义: 1. 高层模块不应该依赖低层模块,两者...就是面向接口编程,采用依赖倒置原则可以减少类间的耦合性,提高系统的稳定性,降低并行开发引起的风险,提高代码的可读性和可维护性。

    初级java笔试题-oopnotes:面向对象编程笔记本,设计原则和模式参考指南

    我已将此笔记本作为面向对象编程概念和设计模式的参考指南。 我的目标是让任何人都能找到遵循面向对象范式正确设计可重用且高效的代码所需的核心概念。 在尝试学习自己的同时,我一直在努力研究并浪费大量时间在多个...

Global site tag (gtag.js) - Google Analytics