zoukankan      html  css  js  c++  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语言中使用接口和工厂的方法,同时也展示了其对于程序日后的扩展带来的便利阅读全文
    posted @ 2012-03-27 09:58 zhoufanking 阅读(748) | 评论 (0) 编辑
     
    摘要: 这里主要记录了一下学习用Java实现链表的方法,给出了两种实现的代码阅读全文
    posted @ 2012-03-20 17:03 zhoufanking 阅读(42) | 评论 (0) 编辑
  • 相关阅读:
    windows7安装django并创建第一个应用
    windows7下安装python环境和django
    js中caller和callee属性详解
    分享一个Python脚本--统计redis key类型数据大小分布
    你真的懂git 吗
    如何禁止打印页面
    ZooKeeper入门实战教程(一)-介绍与核心概念
    【shell】shell中各种括号的作用()、(())、[]、[[]]、{}
    Web Components 入门实例教程
    npx 使用教程
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2420346.html
Copyright © 2011-2022 走看看