Quantcast
Channel: CSDN博客移动开发推荐文章
Viewing all articles
Browse latest Browse all 5930

23种设计模式之——中介者模式

$
0
0

前言
随着学习的不断深入,在重构代码的同时会考虑引用一些设计模式,来增加代码的可读性,健壮性,可维护性。并且尽可能的符合设计原则

中介者模式定义:中介者模式类MVP模式,V——->p<———M ,而M 和 V 是不直接进行交互的

类别:行为型

类图:

这里写图片描述

角色定义:
从类图中看,中介者模式有以下几部分组成:
抽象中介者(Mediator)角色:抽象中介者角色定义统一的接口用于各同事角色之间的通信。
具体中介者(Concrete Mediator)角色:具体中介者角色通过协调各同事角色实现协作行为,因此它
必须依赖于各个同事角色。
同事(Colleague)角色:每一个同事角色都知道中介者角色,而且与其他的同事角色通信的时候,一
定要通过中介者角色协作。每个同事类的行为分为两种:一种是同事本身的行为,比如改变对象本身的状
态,处理自己的行为等等,这种方法叫做自发行为(Self-Method),与其他的同事类或中介者没有任何的依

源码分析:

类图

这里写图片描述

1.

package demo;

public class Client {

    public static void main(String[] args) {
        // 采购人员采购电脑
        System.out.println("------采购人员采购电脑--------");
        Purchase purchase = new Purchase();
        purchase.buyIBMcomputer(100);
        // 销售人员销售电脑
        System.out.println("\n------销售人员销售电脑--------");
        Sale sale = new Sale();
        sale.sellIBMComputer(1);
        // 库房管理人员管理库存
        System.out.println("\n------库房管理人员清库处理--------");
        Stock stock = new Stock();
        stock.clearStock();
    }

}

2.

package demo;

/**
 * 采购管理
 * 
 * @author weichyang
 * 
 */
public class Purchase {

    /**
     * 购买Ibm笔记本
     * 
     * @param number
     */
    public void buyIBMcomputer(int number) {

        Stock stock = new Stock();

        Sale sale = new Sale();

        int saleStatus = sale.getSaleStatus();

        if (saleStatus > 80) {
            System.out.println("采购IBM COMPUTER" + number + "台");
            stock.increase(number);
        } else {
            int buyNumber = number / 2;
            System.out.println("采购IBM电脑" + buyNumber + "台");
            stock.increase(buyNumber);
        }

    }

    /**
     * 停止购买
     */
    public void refuseBuyIBM() {
        System.out.println("不再采购IBM电脑");
    }
}

3.

package demo;

import java.util.Random;

/**
 * 销售管理
 * 
 * @author weichyang
 * 
 */
public class Sale {

    /*
     * 正常销售ibm电脑
     */
    public void sellIBMComputer(int number) {

        Stock stock = new Stock();

        Purchase purchase = new Purchase();
        if (stock.getStockNumber() < number) {
            purchase.buyIBMcomputer(number);
        }

        System.out.println("销售IBM电脑" + number + "台");

        stock.decreate(number);

    }

    /**
     * 销售产品状态
     * 
     * @return
     */

    public int getSaleStatus() {

        Random random = new Random(System.currentTimeMillis());
        int stateStatus = random.nextInt(100);
        System.out.println("IBM电脑的销售情况为:" + stateStatus);

        return stateStatus;
    }

    /**
     * 折价销售
     */
    public void offSale() {
        Stock stock = new Stock();
        System.out.println("折价销售IBM电脑" + stock.getStockNumber() + "台");
    }

}

4.

package demo;

import org.omg.CORBA.PUBLIC_MEMBER;

/**
 * 存货管理
 * 
 * @author weichyang
 * 
 */
public class Stock {

    public static int COMPUTER_NUMBER = 100;

    /**
     * 增加
     * 
     * @param number
     */
    public void increase(int number) {
        COMPUTER_NUMBER = COMPUTER_NUMBER + number;
        System.out.println("库存增加数量" + COMPUTER_NUMBER);

    }

    /*
     * 减少图书
     */
    public void decreate(int number) {
        COMPUTER_NUMBER = COMPUTER_NUMBER - number;
        System.out.println("库存数量" + COMPUTER_NUMBER);
    }

    /**
     * 得到存储总量
     * 
     * @return
     */
    public int getStockNumber() {

        return COMPUTER_NUMBER;
    }

    /**
     * 清库存
     */
    public void clearStock() {

        Purchase purchase = new Purchase();
        Sale sale = new Sale();

        System.out.println("清除存货数量为" + COMPUTER_NUMBER);

        sale.offSale();

        purchase.refuseBuyIBM();

    }

}

模拟商品采购管理:Purchase 采购管理,Sale 销售管理,Stock 存储管理
可以看到里面耦合关系错综复杂,如何只是这几个类还好。那么后期进行添加新的职责类会造成代码很难维护。如果采用中介模式会怎么样呢?
这里写图片描述

这种类间互相关联的效果,看着就是噩梦

大家都是学计算机的,应该在上学的时候讲过一些网络的基本知识,还记得网络拓扑有几种类型吗?
总线型,环型,星型,(什么?想不起来?!惩罚一下自己去),我们来想想星型拓扑是什么什么样子的,
如下图:

这里写图片描述

上图销售管理进行改造:

这里写图片描述

类图更改为

这里写图片描述

休息一下,其他事情耽搁了。相应的类需要重新修改———-未完

引用:
中介者设计模式: http://blog.csdn.net/zhengzhb/article/details/7430098
23中设计模式 pdf

作者:o279642707 发表于2017/3/6 15:34:02 原文链接
阅读:0 评论:0 查看评论

Viewing all articles
Browse latest Browse all 5930

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>