<Java设计模式>——最少知识原则(LKP)产品经理:这个功能很简单,怎么实现我不管

看看定义吧

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

什么是最少的了解呢?应该是被调用类的所能够提供的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怎么管理程序员的开发,他压根不需要了解,只要告诉我开发完成了没有。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,094评论 25 708
  • 先说项目开发过程中团队人员的分工协作。 一 人员安排 毕业至今的大部分项目都是独立完成,虽然也有和其他同事协作的时...
    SnowflakeCloud阅读 10,819评论 3 59
  • 文/浅草沧月 我在深夜写字, 趁着腼腆酣睡。 想跟你多聊一些, 关于云朵缱绻的蓝天、和高高山岗的侧脸; 芦苇滩头、...
    浅草沧月阅读 182评论 0 1
  • 在一年都下不了几次的曹妃甸昨天终于大发慈悲下了一场足以驱散整个夏季热气的雨,昨天晚上去上教室上课换了衣服,...
    轩白贝阅读 174评论 0 0
  • 无需讳言,不少公司采用的是“机会主义战略”,通过扑捉市场机会,获得了阶段性的增长。不愿化大力气培育核心竞争力,也不...
    南山行者369阅读 542评论 0 1