`

java中接口的编程理解

 
阅读更多

转载至:http://www.cnblogs.com/LearningC/p/3629140.html

 

针对接口编程。简简单单的六个字。说起来简单,想要做到这一步,需要花点时间和精力。

          下面,我讲通过自己做过的项目和经验来谈谈我的理解。如果有理解不对的地方,还请各位指正。

情景:

         现在,有一个门禁需要驱动(这里的驱动指的是控制)。第一步:必须先建立连接;第二部:发送传输命令,让门磁打开,或是关闭。第三步:关闭连接。

         说到这里,我想起了我自己的开发经历。相当长的一段时间,我会这样做。(如下)     

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Class Door
{
   public void Connect()
    {
         Console.WriteLine("Connected the Door!");    
    
 
   public void DisConnected()
   {
         Console.WriteLine("DisConnected the Door!");
   }
 
   public void SendCommand(bool OptOptions)
   {
       //这里假设是用Socket来通讯的
         if(OptOptions)//Open
      {
        Console.WriteLine("Open the Door");
      }
       else
      {
        Console.WriteLine("Close the Door");
      }
   }
}

  调用:

1
2
3
4
Door dr = new Door();
dr.Connect();
dr.SendCommand();
dr.DisConnect();

     后来,硬件工程师告诉我,设备升级了,他们不仅可以通过网络来传送命令。也可以通过COM口来传送命令,领导还说,这个必须和旧的设备兼容,需求的变动,永远是我们头疼的也是必须解决的问题。于是,我们这样改变。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
Class Door
{
   //这里是原来的连接和断开方式,假设都是Socket通讯。
   public void Connect()
    {
         Console.WriteLine("Connected the Door!");    
    
 
   public void DisConnected()
   {
         Console.WriteLine("DisConnected the Door!");
   }
   //现在,需要重新写断开和连接。而方式步同。需要用COM
    
   ……
 
   //这里我们省略这一过程。因为这步是目的。
 
   public void SendCommand(bool OptOptions)
   {
       //这里假设是用Socket来通讯的
         if(OptOptions)//Open
      {
        Console.WriteLine("Open the Door");
      }
       else
      {
        Console.WriteLine("Close the Door");
      }
   }
 
   public void SendCommandbyCom(bool OptOptions)
   {
       //这里假设是用COM来通讯的
         if(OptOptions)//Open
      {
        Console.WriteLine("Open the Door");
      }
       else
      {
        Console.WriteLine("Close the Door");
      }
   }
 
}

  我们需要该变原来的类,因为需要兼容原来的设备。当然,调用的地方也需要做相应的修改。因为我们需要区别到底是新设备还是旧设备。

1
2
3
4
Door dr = new  Door();
dr.ConnectByCom();
dr.SendCommandByCom();
dr.DisConnectByCom();

  

   我们发现,仅仅修改了一个设备的通讯方式,我们需要做出的改变是巨大的。如果我们针对接口编程,这里涉及到、单一职责原则里氏替换原则、依赖倒置原则

   这里,我会将门禁的连接、断开封装在一个接口中。将发送命令封装在另外一个接口中。   

这里是连接接口:

1
2
3
4
5
interface IConnect
{
       void Connect();
       void DisConnect();  
}

这里是通讯接口:

1
2
3
4
interface ISendCommand
{
       void SendCommand();     
}

这里是我们的门禁接口:

1
2
3
4
interface IDoor:IConnect,ISendCommand
{
        
}

这里是门禁的实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Class Door:IDoor
{
   public void Connect()
    {
       //Socket通讯
    
 
   public void DisConnected()
   {
         //Socket通讯
   }
 
   public void SendCommand(bool OptOptions)
   {     
    //Socket通讯
   }
}

  我们发现和最开始写的没什么不一样,但是,我们继续看下面的调用。

1
2
3
4
IDoor dr = new Door();
dr.Connect();
dr.SendCommand();
dr.DisConnect();

  发现,我们定义了一个IDoor 而不是Door ,我们却用的Door来实现。如果这个时候硬件工程师告诉我们。通讯方式变了。这个时候。我们只需要添加一个新的类叫NewDoor

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Class NewDoor:IDoor
{
   public void Connect()
    {
       //COM通讯
    
 
   public void DisConnected()
   {
         //COM通讯
   }
 
   public void SendCommand(bool OptOptions)
   {     
    //COM通讯
   }
}

  这个时候,我们调用的时候,只需要确定是新设备的时候,用NewDoor来实例化。而不是Door。

1
2
3
4
5
6
7
8
9
10
//旧设备
IDoor dr = new Door();
dr.Connect();
dr.SendCommand();
dr.DisConnect();
//新设备
IDoor ndr = new NewDoor();
ndr.Connect();
ndr.SendCommand();
ndr.DisConnect();

 我们发现改动量小了很多,而且结构清晰,便于维护。项目组里面如果有人员变动,如果文档比较清晰的话,这些都是很好上手的。

 

 

针对面向实接口实现编程:

interface Tire {publicvoid roll(); } class Bridgestone implements Tire {publicvoid roll() { System.out.print("Bridgestone is rolling."); } } class Michelin implements Tire {publicvoid roll() { System.out.print("Michelin is rolling"); } }

接口Tire定义了“转动”这个接口,但把实现延迟到了子类中

classCar { public void roll(Tire tire) { tire.roll(); } } Car car = new Car(); BridgeStone tire1 = new Bridgestone(); Michelin tire2 = new Mechilin(); car.roll(tire1); car.roll(tire2);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    java面向接口编程

    在Java编程语言中,"面向接口编程"是一种重要的设计原则,它强调了程序设计应以接口为中心,而非具体的实现类。这种编程范式有助于提高代码的可扩展性、可维护性和松耦合性。让我们通过生活中的实例和给定的类文件来...

    java 接口练习作业

    在Java编程语言中,接口(Interface)是一种定义行为规范的关键概念。它允许我们定义一组抽象方法,供不同的类实现,从而...通过实践,你将更深入地理解Java的面向接口编程思想,这在大型项目和团队开发中尤为重要。

    Java-Java函数式编程教程

    在Java 8及更高版本中,函数式编程得到了官方的大力支持,引入了Lambda表达式、Stream API和Optional类等新特性,使得Java开发者可以更高效、简洁地编写代码。 1. **Lambda表达式**: Lambda表达式是Java函数式...

    针对接口编程 java示例

    在Java编程中,接口(Interface)是一种...通过阅读和理解这些代码,你可以更深入地了解接口编程在Java中的应用以及如何实现设计模式。这种实践对于提升编程技能,尤其是理解面向接口编程的重要性,是非常有价值的。

    Java 并发编程实战.pdf

    《Java并发编程实战》这本书是关于Java语言中并发编程技术的经典著作。它详细介绍了如何在Java环境中有效地实现多线程程序和并发控制机制。在Java平台上,由于其本身提供了强大的并发编程支持,因此,掌握并发编程...

    java实验 面向抽象与接口编程

    面向抽象与接口编程是Java编程中的核心概念,它体现了面向对象设计的原则,旨在提高代码的灵活性、可扩展性和可维护性。在这个实验中,我们将深入探讨这两个关键概念,并通过实践来理解它们在实际编程中的应用。 ...

    java开发接口帮助文档

    Java开发接口帮助文档是开发者在进行Java编程时的重要参考资料,它包含了JDK中的类库、接口、类与类之间的继承关系以及接口与接口之间的继承结构等详细信息。这份文档通常以`.chm`(Microsoft Compiled HTML Help)...

    汪文君JAVA多线程编程实战(完整不加密)

    这本书旨在帮助Java开发者深入理解和熟练掌握多线程编程技术,提升软件开发的效率和质量。在Java平台中,多线程是并发处理的基础,对于构建高效、可扩展的系统至关重要。 Java多线程允许程序同时执行多个独立的代码...

    java并发编程实战源码,java并发编程实战pdf,Java

    在Java并发编程中,主要涉及以下几个关键知识点: 1. **线程与进程**:线程是程序执行的最小单元,一个进程中可以有多个线程同时执行。理解线程的概念和生命周期对于并发编程至关重要。 2. **线程安全**:当多个...

    《java 并发编程实战高清PDF版》

    Java内存模型(JMM)是理解并发编程中数据一致性问题的基础。JMM定义了线程如何访问和共享内存,确保在并发环境下正确地执行。书中详细阐述了可见性、原子性和有序性这些概念,并通过`volatile`关键字和`final`修饰...

    《Java函数式编程》_高清华.zip

    在Java 8及更高版本中,函数式编程得到了显著增强,引入了Lambda表达式、函数接口、Stream API等新特性,使得Java开发者也能享受到函数式编程的益处。 1. **Lambda表达式**:Lambda表达式是Java 8引入的关键特性,...

    java中的面向接口编程.doc

    【Java中的面向接口编程】 在Java编程中,面向接口编程是一种重要的设计原则,它强调程序设计应关注于接口而非具体的实现。这种编程方式的核心思想是将接口作为对象间交互的契约,使得对象间的耦合度降低,提高了...

    java网络编程第四版pdf

    书中内容覆盖了从基本的网络概念到复杂的多线程编程,是Java开发者进阶网络编程领域的必备参考资料。 第一章“基本网络概念”主要介绍了网络的基础知识,包括TCP/IP协议族、互联网的工作原理、IP地址和域名系统。这...

    Java经典编程50道

    《Java经典编程50道》是一份集合了Java编程中具有代表性和挑战性的题目资源,包含完整的源码,旨在帮助开发者提升Java编程技能。通过学习和实践这些题目,开发者可以深入理解Java语言的核心特性和常见设计模式,...

    Java并发编程实践高清pdf及源码

    在Java并发编程中,"并发"是指在单个程序中同时执行多个任务,这通常通过多线程实现。Java平台提供了丰富的API来支持并发,如`Thread`类、`ExecutorService`接口和`Future`接口等。这些工具允许开发者设计出能够充分...

    java并发编程内部分享PPT

    Java内存模型(JMM)是理解并发编程中内存可见性问题的基础。它定义了线程如何访问和修改共享变量,以及这些操作如何在不同线程之间同步。volatile和synchronized都是JMM的一部分,它们帮助实现了线程之间的通信和...

    Java编程的逻辑

    Java编程的逻辑是编程世界中的一个重要主题,尤其对于初学者来说,掌握这些基本概念和思维方式至关重要。Java作为一种广泛使用的面向对象编程语言,以其强大的跨平台能力、严谨的语法和丰富的类库深受开发者喜爱。本...

    使用java理解程序逻辑

    "使用Java理解程序逻辑"这个主题旨在帮助初学者建立起编程思维,通过Java语言来阐述和实践编程的基本原理。 一、Java编程基础 Java是一种面向对象的编程语言,由Sun Microsystems(现为Oracle公司)于1995年推出。...

    java语法大全,java语法,java编程基础,java入门

    这份"java语法大全"文档,结合了“java语法”,“java编程基础”,以及“java入门”等核心主题,旨在为初学者提供全面的学习资源,帮助他们理解和掌握Java语言的基本概念和高级特性。 首先,Java语法是学习Java的...

Global site tag (gtag.js) - Google Analytics