各位好,大家都是来自五湖四海,都要生存,于是都找了个靠山——公司,给你发薪水的地方,那公司就要想尽办法盈利赚钱,盈利方法则不尽相同,但是作为公司都有相同三个环节:采购、销售和库存,这个怎么说呢?比如一个软件公司,要开发软件,需要开发环境吧, Windows 操作系统,数据库产品等,这你得买吧,那就是采购,开发完毕一个产品还要把产品推销出去,推销出去了大家才有钱赚,不推销出去大家都去喝西北风呀,既然有产品就必然有库存,软件产品也有库存,你总要拷贝吧,虽然是不需要占用库房空间,那也是要占用光盘或硬盘,这也是库存,再比如做咨询服务的公司,它要采购什么?采购知识,采购经验,这是这类企业的生存之本,销售的也是知识和经验,库存同样是知识和经验。尽然进销存是这么的重要,我们今天就来讲讲它的原理和设计,我相信很多人都已经开发过这种类型的软件,基本上都形成了固定套路,不管是单机版还是网络版,一般的做法都是通过数据库来完成相关产品的管理,相对来说还是比较简单的项目,三个模块之间的示意图如下:
我们从这个示意图上可以看出,三个模块是相互依赖的,基本上是你中有我,我中有你,为什么呢?我们就以一个终端销售商(什么是终端销售商?就是以服务最终客户为目标的企业,比如 XX 超市,国美电器等等)为例子,比如采购部门要采购 IBM 型号的电脑了,它是根据什么来决定采购的呢?根据两个要素:
销售情况。销售部门要反馈销售情况,畅销就多采购,滞销就不采购;
库存情况。即使是畅销产品,库存都有 1000 台了,每天才卖出去 10 台,还要采购吗?!
销售模块是企业的盈利核心,也是对其他两个模块有影响的:
库存情况。库房有货,才能销售,没货空手套白狼是不行的;
督促采购。在特殊情况下,比如一个企业客户一下子要卖 100 台电脑,你库存里只有 80 台,怎么办?催采购部门赶快采购呀!
同样的,库存管理也对其他两个模块有影响,库房是有容积限制的,不可能无限大,所以就有了清仓处理,那就要求采购部门别采购了,同时销售部门赶快打折销售。
从以上分析来看,这三个模块都是有自己的行为,并且与其他模块之间的行为产生关联关系,就类似我们在办公室中的同事,大家各干各的活,但是彼此之间还是有交叉的,于是乎大家之间就产生紧密耦合,也就是一个团队。我们先来实现这个进销存,先看类图:
Purchase 负责采购管理,buyIBMComputer 是指定了采购 IBM 电脑,refuseBuyIBM 是不再采购 IBM 了 ,源代码如下:
1 package com.pattern.mediator; 2 3 public class Purchase { 4 5 // 采购IBM型号的电脑 6 public void buyIBMcomputer(int number){ 7 // 访问库存 8 Stock stock = new Stock(); 9 // 访问销售 10 Sale sale = new Sale(); 11 12 // 电脑的销售情况 13 int saleStatus = sale.getSaleStatus(); 14 15 if(saleStatus > 80){ //销售情况良好 16 System.out.println("采购IBM电脑:" + number + "台"); 17 stock.increase(number); 18 }else { //销售情况不好 19 int buyNumber = number / 2; //折半采购 20 System.out.println("采购IBM电脑:" + buyNumber + "台"); 21 } 22 } 23 24 // 不再采购IBM电脑 25 public void refuseBuyIBM(){ 26 System.out.println("不再采购IBM电脑"); 27 } 28 29 }