新手求教:
Customer可以search商品(Product class), search又可以分为普通和高级
请问为什么要把search做成一个接口,而不是作customer的内部方法?
谢谢各位解惑~

解决方案 »

  1.   

    类中的方法需要调用Search参数时, 如果你传进来一个普通Search 那么方法执行普通Search 传进来高级Search 则执行高级Search操作! 
      这个就是面向对象的多态    
      设计模式管叫 针对接口编程
      

  2.   

    这么跟你说吧:
    Customer和Search之间是一种"has-a"的关系。意思就是Customer可以有Search,而Visitor(游客)我希望其没有搜索功能。但不管是Customer还是Visitor,它们向上一层抽象的话,可以是User。当然了User下面还可以有许多其他用户如Administrator,VIPUser等等等等。。对于我希望有搜索功能的用户,比如你题中所说的Customer,我就让它持有一个Search接口的引用,并且可以根据工厂模式通过传入一个参数在运行期间得到Search接口的实现类,比如普通搜索或高级搜索。这个参数可以在前台页面通过设置一个复选框之类的决定进行哪种搜索方式。当然了,这个交互细节我们不必长篇大论!
    只要接口相对结实,其实现类的改变不会影响到模块之间(如果你用实现类进行关联,那就容易造成牵一发而动全身的现象)。从而降低了程序的耦合度,增强了可维护性及可扩展性。对于这些,你目前只需要稍稍了解即可!
      

  3.   


    interface Searchable{
    public Product searchProduct(String  productId);
    }
    class Customer implements Searchable{
    public Product searchProduct(String  productId){
    //实现这个方法
    }
    }
    接口的最大好处就是可以不用去关心接口方法中的具体实现而直接调用方法,就比如要通过productId去找Product,在接口中我只要关心给什么返回什么就可以了而不用去管怎么找到这个Product(这是它的实现类的工作).而这样做的好处就是当我换一种方式去找时,就可以不用去该已经写好的代码了,需要去换个实现类就可以了.以上仅个人浅见!
      

  4.   


    同意,简而言之,Customer可以search, 但可能有其他类(比如 RemotePC,故意取个非人的类,省得楼主又说继承可以解决。)也可以Search. 如果正好有个方法需要传个search对象进去,这样Customer和RemotePC都可以作为参数传进去.