上文(设计模式-访问者模式):https://blog.csdn.net/qq_16498553/article/details/106934637


目录

背景

业务代表模式是什么?

角色:

优点:

缺点:

业务代表模式可以干嘛?

业务代表模式类图

源码下载:https://gitee.com/hong99/design-model/issues/I1IMES

实现代码

结果

源码下载:https://gitee.com/hong99/design-model/issues/I1IMES

最后


背景

一般在企业里面各个部门都有一个负责人,如果有什么事直接接这个负责人就可以了,而这个负责起到一个对外暴露的作用,有什么事直接找负责人。

业务代表模式是什么?

业务代表模式(Business Delegate Pattern)用于对表示层和业务层解耦。它基本上是用来减少通信或对表示层代码中的业务层代码的远程查询功能。在业务层中我们有以下实体。

角色:

客户端(client):表示层可以是html、jsp、servlet或java的UI代码。

业务代表(Business Delegate): 一个为客户端实体提供的入口类,它提供了对业务服务方法的访问。

查询服务(LookUp Service):查找服务对象负责获取相关的业务实现,并提供业务对象对业务代表对象的访问。

业务服务(Business Service): 业务服务接口。实现了该业务服务的实体类,提供了实际的业务实现逻辑。

优点:

低耦合高灵活:减少系统之间的相互依赖;

高内聚:有问题外部也是不知道的,只会怪接口,所以内部好处理掉这些问题。

缺点:

不符合开闭原则,增删改可能影响原来功能和流程;

业务代表模式可以干嘛?

业务代表模式主要解决一个是直接将业务交给业务代表去调用,当然所有的内部接口都向业务代表暴露,通过业务代表统一去操作,起到一个作用是用户不会直接面对内部系统而是面对。

个人理解:

该模式有点类似于门面模式,统一由一个负责人来面对客户,然后进行操作。

业务代表模式类图

源码下载:https://gitee.com/hong99/design-model/issues/I1IMES

实现代码

/**
 * @Auther: csh
 * @Date: 2020/6/23 17:08
 * @Description: 业务代表(Business Delegate)
 */
public class BusinessDelegate {
    private BusinessLookUp lookUp = new BusinessLookUp();
    private BusinessService businessService;
    private String serviceType;

    public void setServiceType(String serviceType) {
        this.serviceType = serviceType;
    }

    public void doTask(){
        businessService = lookUp.getBusinessService(serviceType);
        businessService.doProcessing();
    }
}
/**
 *
 * 功能描述:抽象业务接口
 *
 * @param:
 * @return:
 * @auther: csh
 * @date: 2020/6/23 18:30
 */
public interface BusinessService {
   public void doProcessing();
}
/**
 *
 * 功能描述:查询服务(LookUp Service)
 *
 * @param:
 * @return:
 * @auther: csh
 * @date: 2020/6/23 18:30
 */
public class BusinessLookUp {
   public BusinessService getBusinessService(String serviceType){
      if(serviceType.equalsIgnoreCase("EJB")){
         return new EJBService();
      }else {
         return new JMSService();
      }
   }
}

 

/**
 *
 * 功能描述:Business Service
 *
 * @param:
 * @return:
 * @auther: csh
 * @date: 2020/6/23 18:30
 */
public class EJBService implements BusinessService {
 
   @Override
   public void doProcessing() {
      System.out.println("Processing task by invoking EJB Service");
   }
}

 

/**
 *
 * 功能描述:业务接口(Business Service)
 *
 * @param:
 * @return:
 * @auther: csh
 * @date: 2020/6/23 18:30
 */
public class JMSService implements BusinessService {
 
   @Override
   public void doProcessing() {
      System.out.println("Processing task by invoking JMS Service");
   }
}

 

/**
 * @Auther: csh
 * @Date: 2020/6/23 17:09
 * @Description: 客服端(client)
 */
public class Client {

    BusinessDelegate businessDelegate;

    public Client(BusinessDelegate businessDelegate) {
        this.businessDelegate = businessDelegate;
    }

    public void doTask(){
        businessDelegate.doTask();
    }
}

 

/**
 * @Auther: csh
 * @Date: 2020/6/23 17:10
 * @Description:由具体业务代表来调用业务
 */
public class Test {
    public static void main(String[] args) {
        BusinessDelegate businessDelegate = new BusinessDelegate();
        businessDelegate.setServiceType("EJB");

        Client client = new Client(businessDelegate);
        client.doTask();

        businessDelegate.setServiceType("JMS");
        client.doTask();
    }
}

结果

Processing task by invoking EJB Service
Processing task by invoking JMS Service

源码下载:https://gitee.com/hong99/design-model/issues/I1IMES

最后

业务代表模式,非常类似于门面模式的思想,同样是由一个负责人在前面,面对用户,而后端的接口只暴露给该负责人,当然一样的问题中心节点一但出问题整个系统就GG了,虽然说起到高内聚作用。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐