Android开发经验谈Java设计模式Android技术知识

<Java设计模式>——最少知识原则(LKP)产品经

2017-09-22  本文已影响143人  元涛
看看定义吧

一个对象对其他的对象要保持最少的了解。

什么是最少的了解呢?应该是被调用类的所能够提供的public方法多少,如果提供的比较多的话,那么了解相对就比较多。

为什么要保持最少的了解呢?

其实最重要的是降低耦合,咱们先看个例子。

//产品经理
class ProductManager{
     private Coder coder = new Coder();
    public String buildProduct(){
        if(!coder.developService()){
            return "后台开发出现问题";
        }
        if(!coder.developClient()){
            return "客户端开发出现问题";
        }
        return "产品开发完成了";
    }
}

//程序员
class Coder{
    public boolean developService(){}
    public boolean developClient(){}
}

//大老板
class Boss{
    private ProductManager productManager = new ProductManager();
    public void useProduct(){
         System.out.println(productManager.buildProduct());
    }
}

一个很简单的情景,产品经理设计好产品之后,让程序员,进行开发,然后大boss去向产品经理检查产品。
产品经理:”boss,后台出现问题了“
老板:“后台具体出现什么问题了?”
产品经理:“不知道”
老板:“fk,还不赶紧给我问”
产品经理大怒,赶紧换了一种工作方式。

class Coder{
    //由原来的boolean换成int,产品经理根据不同的code,知道具体出现什么问题
    public int developService(){}
    public int developClient(){}
}

一旦coder两个方法的返回值改成了int,那么产品经理的方法只要引用到boolean的方法都需要进行修改,这就是因为产品经理对程序员的工作了解太多了,导致的。

产品经理:“boss,你还是招聘一个CTO吧,我懒得和程序员沟通了,我只要和CTO沟通就行了。”

//产品经理
class ProductManager{
    private CTO cto = new CTO();
     public boolean check(){
          return cto.buildProduct()==null;
    }
}

class CTO{
     private Coder coder = new Coder();

    public String buildProduct(){
       switch(coder.developService()){
            case 101:
            return "错误原因:XXXX"
            case 102:
            return "错误原因:XXXX"
            case 103:
            return "错误原因:XXXX"
        }
        switch(coder.developClient()){
            case 101:
            return "错误原因:XXXX"
            case 102:
            return "错误原因:XXXX"
            case 103:
            return "错误原因:XXXX"
        }
        return null;
    }
}

class Coder{
    public boolean developService(){}
    public boolean developClient(){}
}

//大老板
class Boss{
    private ProductManager productManager = new ProductManager();
private CTO cto = new CTO();
    public void useProduct(){
        if(!productManager.check()){
          System.out.println(cto.buildProduct());
         }else{
          System.out.println("bingo,开发完成了!");
        }
    }
}

看到这里,程序员多了一个CTO的包装类,并且产品经理只了解CTO的一个方法,至于CTO怎么管理程序员的开发,他压根不需要了解,只要告诉我开发完成了没有。

上一篇下一篇

猜你喜欢

热点阅读