java 23 种设计模式-27-java 业务代表模式(Business Delegate Pattern)

目录

业务代表模式

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

  • 客户端(Client)

表示层代码可以是 JSP、servlet 或 UI java 代码。

  • 业务代表(Business Delegate)

一个为客户端实体提供的入口类,它提供了对业务服务方法的访问。

  • 查询服务(LookUp Service)

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

  • 业务服务(Business Service)

业务服务接口。实现了该业务服务的实体类,提供了实际的业务实现逻辑。

实际案例

类信息概览:

类名说明
Main.java方法的总入口
Client.java客户端
JMSService.javaJMS 服务类
EJBService.javaEJB 服务类
BusinessLookUp.java服务查找类
BusinessDelegate.java业务代表类
BusinessService.java业务服务接口

定义

  • Client.java
/*
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
 * Copyright (c) 2012-2018. houbinbini Inc.
 * design-pattern All rights reserved.
 */

package com.ryo.design.pattern.note.bussinessDelegate;

/**
 * <p> </p>
 *
 * <pre> Created: 2018/5/27 下午6:51  </pre>
 * <pre> Project: design-pattern  </pre>
 *
 * @author houbinbin
 * @version 1.0
 * @since JDK 1.7
 */
public class Client {

    private BusinessDelegate businessService;

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

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

}
  • JMSService.java
/*
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
 * Copyright (c) 2012-2018. houbinbini Inc.
 * design-pattern All rights reserved.
 */

package com.ryo.design.pattern.note.bussinessDelegate;

/**
 * <p> </p>
 *
 * <pre> Created: 2018/5/27 下午6:46  </pre>
 * <pre> Project: design-pattern  </pre>
 *
 * @author houbinbin
 * @version 1.0
 * @since JDK 1.7
 */
public class JMSService implements BusinessService {

    @Override
    public void doProcessing() {
        System.out.println("Processing task by invoking JMS Service");
    }

}
  • EJBService.java
/*
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
 * Copyright (c) 2012-2018. houbinbini Inc.
 * design-pattern All rights reserved.
 */

package com.ryo.design.pattern.note.bussinessDelegate;

/**
 * <p> </p>
 *
 * <pre> Created: 2018/5/27 下午6:46  </pre>
 * <pre> Project: design-pattern  </pre>
 *
 * @author houbinbin
 * @version 1.0
 * @since JDK 1.7
 */
public class EJBService implements BusinessService {

    @Override
    public void doProcessing() {
        System.out.println("Processing task by invoking EJB Service");
    }

}
  • BusinessLookUp.java
/*
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
 * Copyright (c) 2012-2018. houbinbini Inc.
 * design-pattern All rights reserved.
 */

package com.ryo.design.pattern.note.bussinessDelegate;

/**
 * <p> 创建业务查询服务 </p>
 *
 * <pre> Created: 2018/5/27 下午6:50  </pre>
 * <pre> Project: design-pattern  </pre>
 *
 * @author houbinbin
 * @version 1.0
 * @since JDK 1.7
 */
public class BusinessLookUp {

    /**
     * 获取业务服务
     * @param serviceType
     * @return
     */
    public BusinessService getBusinessService(String serviceType){
        if(serviceType.equalsIgnoreCase("EJB")){
            return new EJBService();
        }else {
            return new JMSService();
        }
    }

}
  • BusinessDelegate.java
/*
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
 * Copyright (c) 2012-2018. houbinbini Inc.
 * design-pattern All rights reserved.
 */

package com.ryo.design.pattern.note.bussinessDelegate;

/**
 * <p> 创建业务代表 </p>
 *
 * <pre> Created: 2018/5/27 下午6:50  </pre>
 * <pre> Project: design-pattern  </pre>
 *
 * @author houbinbin
 * @version 1.0
 * @since JDK 1.7
 */
public class BusinessDelegate {

    private BusinessLookUp lookupService = new BusinessLookUp();
    private String serviceType;

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

    public void doTask(){
        BusinessService businessService = lookupService.getBusinessService(serviceType);
        businessService.doProcessing();
    }

}
  • BusinessService.java
/*
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
 * Copyright (c) 2012-2018. houbinbini Inc.
 * design-pattern All rights reserved.
 */

package com.ryo.design.pattern.note.bussinessDelegate;

/**
 * <p> </p>
 *
 * <pre> Created: 2018/5/27 下午6:44  </pre>
 * <pre> Project: design-pattern  </pre>
 *
 * @author houbinbin
 * @version 1.0
 * @since JDK 1.7
 */
public interface BusinessService {

    /**
     * 执行操作
     */
    void doProcessing();

}

测试

  • Main.java
/*
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
 * Copyright (c) 2012-2018. houbinbini Inc.
 * design-pattern All rights reserved.
 */

package com.ryo.design.pattern.note.bussinessDelegate;

/**
 * <p> </p>
 *
 * <pre> Created: 2018/5/27 下午6:54  </pre>
 * <pre> Project: design-pattern  </pre>
 *
 * @author houbinbin
 * @version 1.0
 * @since JDK 1.7
 */
public class Main {

    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();
    }

}
  • 测试结果


实现方式

UML & Code

UML

UML 图示如下

Code

代码地址

业务代表模式

系列导航

系列导航

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 后端开发中常用的设计模式有很多,以下是其中一些常见的设计模式: 1. 单例模式(Singleton Pattern):确保一个类只有一个实例,并提供全局访问点。 2. 工厂模式(Factory Pattern):将对象的创建过程封装在一个工厂类中,避免直接使用 new 关键字来创建对象。 3. 抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。 4. 观察者模式(Observer Pattern):定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,其所有依赖者都会收到通知并自动更新。 5. 适配器模式(Adapter Pattern):用于将一个类的接口转换成客户端所期望的另一个接口。 6. 装饰器模式(Decorator Pattern):动态地给一个对象添加额外的职责,是继承关系的替代方案。 7. 策略模式(Strategy Pattern):定义了一系列算法,并将每个算法封装起来,使它们可以互相替换。 8. 模板方法模式(Template Method Pattern):定义了一个算法的骨架,将一些步骤延迟到子类中实现。 9. 委托模式Delegate Pattern):将一个类的某个方法委派给另一个类来实现。 10. 迭代器模式(Iterator Pattern):提供一方法来访问聚合对象中的各个元素,而不需要暴露其内部结构。 这些设计模式可以帮助开发者提高代码的可维护性、可扩展性和重用性,同时也能够帮助开发者解决一些常见的设计问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值