好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

java中的接口与工厂模式

java中的接口与工厂模式

  Java 中的接口( Interface )和抽象类( Abstract class )都可以用来描述 OO 中的 has-a 关系,不同的是接口定义了一种行为的契约( contract ),约束了其实现类必须具备哪些功能,而抽象类主要体现在其公共代码的共享方面。

这两天刚好学习了一下接口的使用,将自己的一点理解记录下来。

       我用一个比较通俗的例子来形容一下接口的使用。

       比如一家发廊,提供洗头(真的是纯洗头,没别的)、剪发、烫染等业务。那么我们可以定义一个接口来描述我们提供的所有服务,所有顾客来到我们店里都可以选择使用这些服务。

?

public interface Services {

 

    public void Wash();

 

    public void Cut();

 

    public void TangRan();

 

经营范围有了,该找服务员啦, Server 类定义了服务员,也就是本店开展各项业务的载体:

 

?

public class Server implements Services {

   

@Override

public void Wash() {

?

     System.out.println( "Wash hair!" );

 

}

 

@Override

public void Cut() {

 

     System.out.println( "Cutting hair!" );

 

}

 

   

@Override

public void TangRan() {

      

?

     System.out.println( "TangRan hair!" );

 

}

 

 

private Server(){}

 

}

  

这样顾客来后就可以通过我们的服务员享受我们的服务了

客人来了,我就得找个发型师去服务啊,好的,用下面这个方法:

?

Class CallForServer{

 

Public static Class server getaServer(){

 

      Return new server();

 

}

 

}

  

客人吗,有好应付的,就有挑剔的。有人想找个帅哥服务,有人想找个美女服务。顾客的需求是必须要满足地,招人吧,

?

public class Server_HandSomeBoy implements Services {

 

   

 

@Override

public void Wash() {

 

     System.out.println( "Hi a handsome boy is wash your hair!" );

 

}

 

   

 

@Override

public void Cut() {

 

     System.out.println( "Hi a handsome boy is cutting your hair!" );

 

}

 

   

 

@Override

public void TangRan() {

 

     System.out.println( "Hi a handsome boy is TangRan your hair!" );

 

}

 

   

 

private Server_HandSomeBoy(){}

 

}

 

public class Server_PrettyGirl implements Services {

 

@Override

?

public void Wash() {

?

     System.out.println( "Hi a pretty girl is wash your hair!" );

 

}

 

   

 

@Override

public void Cut() {

 

     System.out.println( "Hi a pretty girl is cutting your hair!" );

 

}

 

 

@Override

public void TangRan() {

 

     System.out.println( "Hi a pretty girl is TangRan your hair!" );

 

}

?

public Server_PrettyGirl(){}

 

}

  

再有客人来时,只要您吩咐,绝对找个您满意的服务员接待您!

 

?

public class CallForService {

 

public static Services getaServer(String type){

 

      Services aServInstance = null ;

 

try {

 

aServInstance = (Services)Class.forName( "org.Services.Provider." +type).newInstance();

 

} catch (InstantiationException e) {

 

     e.printStackTrace();

 

} catch (IllegalAccessException e) {

 

     e.printStackTrace();

 

} catch (ClassNotFoundException e) {

 

     e.printStackTrace();

 

}

 

    return aServInstance;

 

}

 

}

  

      对于客户,我们可以如下定义:

?

public class Customer {

 

public Customer(){}

?

public void UseService(Services s){

 

   

try {

 

     s.Wash();

 

     s.Cut();

 

     s.TangRan();

 

} catch (NullPointerException e) {

 

     e.printStackTrace();

 

}

finally {

 

     System.out.println( "No available service!" );

 

}

 

   

}

 

}

  

  客户进店后使用服务的例子:

?

public static void main(String[] args) {

 

 

     Customer c1 = new Customer();

 

     Services Server1 = CallForService.getaServer( "Server_PrettyGirl" );

 

     c1.UseService(Server1);

 

   

 

     Customer c2 = new Customer();

 

     Services Server2 = CallForService.getaServer( "Server_HandSomeBoy" );

    

     c2.UseService(Server2);

 

   

     Customer c3 = new Customer();

 

     Services Server3 = CallForService.getaServer( "Transformer" );

 

     c3.UseService(Server3);

 

}

  

      通过这个例子,接口的使用就比较清楚了。接口是我们对外提供哪些服务的声明,这些服务(方法)是相对固定的,一般在设计的初级阶段需要很好的定义清楚,如果在编码阶段还频繁地更改接口定义,那麻烦就大了!

      对于服务的具体做什么,我们可以根据需求,提供这个接口的多种实现来满足需求。

      用户通过使用类厂得到他需要的服务。如果用户提出了新的服务内容,那么我们只要遵循接口的定义,提供针对新服务的实现,那么用户通过类厂就可以方便地使用新服务。从这里可以看出,使用接口的方法,在增加新的需求时,我们只是将新服务对应的代码加入到软件中,对原有代码并没有做出改动哦。

这里是一个完整的例子: Interface_demo.zip

 

java中的接口与工厂模式

摘要: 通过一个通俗的例子介绍了java语言中使用接口和工厂的方法,同时也展示了其对于程序日后的扩展带来的便利 阅读全文

posted @  2012-03-27 09:58  zhoufanking 阅读(748) |  评论 (0)   编辑

 

用Java实现链表结构

摘要: 这里主要记录了一下学习用Java实现链表的方法,给出了两种实现的代码 阅读全文

posted @  2012-03-20 17:03  zhoufanking 阅读(42) |  评论 (0)   编辑

作者: Leo_wl

    

出处: http://HdhCmsTestcnblogs测试数据/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于java中的接口与工厂模式的详细内容...

  阅读:43次