`
SpaceCity
  • 浏览: 99126 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

方法调用(设计模式之门面模式)

阅读更多
package com.facade;

import java.lang.reflect.Method;
import com.sun.beans.ObjectHandler;

/**
* 加载门面
*
* @author
*/
public class LoadFacade
{
    /**
     * 根据对象、方法、参数列表,返回结果
     *
     * @param obj 对象
     * @param methodName 方法名称
     * @param params 参数列表
     * @return 返回结果
     */
    public static Object invoke(Object obj, String methodName, Object[] params)
    {
        Object resultObj = null;
        Method[] methods = obj.getClass().getMethods();
        for (Method method : methods)
        {
            // 判断方法名称和参数列表是否一致
            if (method.getName().equals(methodName) && getOverLoader(method.getParameterTypes(), params))
            {
                try
                {
                    resultObj = method.invoke(obj, params);
                    break;
                }
                catch (Exception e)
                {
                    // 什么都不处理(异常丢弃)
                }
            }
        }

        return resultObj;
    }

    /**
     * 判断参数列表是否一致
     *
     * @param paramTypes 参数类型
     * @param params 变量类型
     * @return 参数列表一致性
     */
    private static boolean getOverLoader(Class<?>[] paramTypes, Object[] params)
    {
        boolean flag = true;
        // 无参数
        if (null == paramTypes && null == params)
        {
            return flag;
        }
        // 参数个数不一致
        if (null == paramTypes && null != params || null != paramTypes && null == params
            || paramTypes.length != params.length)
        {
            flag = false;
            return flag;
        }
        // 参数类型是否一致
        int size = paramTypes.length;
        for (int index = 0; index < size; index++)
        {
            // 基本类型需要包装
            if (paramTypes[index].isPrimitive())
            {
                paramTypes[index] = ObjectHandler.typeNameToClass(paramTypes[index].getName());
            }
            // 参数类型不相同
            if (!paramTypes[index].getSimpleName().equals(params[index].getClass().getSimpleName()))
            {
                flag = false;
                break;
            }
        }
        return flag;
    }

}
分享到:
评论

相关推荐

    设计模式之门面模式

    门面模式(Facade Pattern)是软件工程中一种常用的设计模式,属于结构型模式。它提供了一个统一的接口,用来访问子系统中的一群接口。门面模式使得子系统的使用更为简单,同时也隐藏了子系统的复杂性,使得客户端...

    23种设计模式--门面模式

    在提供的资源“第17课_设计模式之门面模式.avi”中,可能包含了对门面模式的详细讲解和实例演示,可以帮助你更深入地理解和掌握这一设计模式。通过观看视频,你将有机会看到如何在实际代码中应用门面模式,以及如何...

    设计模式之门面模式.docx

    门面模式作为23种设计模式之一,其核心思想是提供了一个统一的接口,使得子系统的复杂性对外部客户端透明,从而简化了客户端与子系统之间的交互。本文将详细介绍门面模式的组成、应用案例、适用场景和优势,并探讨其...

    JavaScript设计模式.pdf

    单体模式是JavaScript中最基本的设计模式之一。它的主要作用是提供一个命名空间,减少全局变量的数量,避免代码冲突,并组织代码使其易于维护。单体模式可以用来划分命名空间,组织代码和避免代码冲突。 2. 工厂...

    设计模式之门面模式Java实现和类设计图

    门面模式(Facade Pattern)是软件工程中一种常用的设计模式,属于结构型模式,它提供了一个统一的接口,用于访问子系统中的一组接口。在面向对象设计中,门面模式为子系统提供了更简单的接口,使得客户端可以更容易...

    设计模式之门面模式(附demo)

    门面模式(Facade Pattern)是软件工程中一种结构型设计模式,它提供了一个统一的接口,用来访问子系统中的一组接口。这个统一的接口使得客户端不必了解子系统内部的复杂性,只需要与门面进行交互即可。门面模式简化...

    JAVA设计模式(门面模式)—视频

    门面角色:客户端可以调用这个角色的方法。此角色知道子系统的功能和责任。在正常情况下,本角色会将所有从客户端发来的请求委派到相应的子系统中去。 子系统角色:可以同时有一个或者多个子系统。每一个子系统都...

    二十三种设计模式【PDF版】

    设计模式之 Facade(门面?) 可扩展的使用 JDBC针对不同的数据库编程,Facade提供了一种灵活的实现. 设计模式之 Composite(组合) 就是将类用树形结构组合成一个单位.你向别人介绍你是某单位,你是单位中的一个元素...

    设计模式C++学习之门面模式(Facade)

    门面模式(Facade)是设计模式中的一种结构型模式,它的主要目的是为了解决复杂的系统接口问题,提供一个简单的统一接口,使得客户端可以更方便地使用系统。在C++编程中,门面模式的应用尤为常见,它能有效地降低...

    C#设计模式.PDF

    根据提供的文档概览,我们可以对每个章节所涉及的设计模式进行详细的阐述和解释。下面将针对文档中提及的设计模式逐一展开,以便更好地理解这些模式的概念、结构、应用场景以及优缺点。 ### 1. 面向对象程序设计...

    C++设计模式课件14_Facade_门面模式.pdf

    ### C++设计模式之门面模式(Facade Pattern) #### 一、门面模式概述 在软件工程领域,设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易...

    J2EE设计模式.ppt

    代理模式是另一种在J2EE中广泛使用的设计模式,它允许我们通过代理类间接调用原始对象的方法,以实现如访问控制、性能优化等功能。代理模式可以分为访问代理、虚拟代理和远程代理等不同类型,提供了更多的灵活性和...

    7.设计模式-门面模式1

    门面(Facade)模式是一种设计模式,它在软件工程中被广泛使用,目的是为了提供一个更简单、更统一的接口来访问复杂的子系统。通过门面模式,客户端(调用者)无需直接与子系统中的多个组件交互,而是只需要与门面...

    常用设计模式java实现

    6. **工厂方法模式**:工厂方法模式是一种创建型设计模式,它提供了一个创建对象的接口,但让子类决定实例化哪一个类。这样,工厂方法可以把创建对象的责任推迟到子类,使得程序更具灵活性。在Java中,可以定义一个...

    几种常用的设计模式

    - 简单工厂模式(非23种设计模式之一):通过一个工厂类来创建对象,简化客户端代码。 - 工厂方法模式:定义一个创建对象的接口,让子类决定实例化哪一个类。 - 抽象工厂模式:提供一个接口,用于创建相关或依赖对象...

    门面模式门面模式

    门面模式(Facade Pattern)是一种结构型设计模式,它的主要目的是提供一个统一的接口,用来访问子系统中的一组接口。这个接口使得子系统更容易使用,同时也减少了客户端代码与子系统之间的耦合。门面模式通常用于...

    java设计模式资源下载

    标题“java设计模式资源下载”和描述“策略模式、代理模式、单例模式、多例模式、工厂方法模式、抽象工厂模式、观察者模式、适配器模式、门面模式、桥梁模式”指向了设计模式这一软件工程中至关重要的概念。设计模式...

    java设计模式之禅

    根据给定的信息,“Java设计模式之禅”是一本旨在通过轻松幽默的方式介绍23种经典设计...接下来的章节还会介绍更多设计模式,如门面模式、适配器模式、模板方法模式等,帮助读者全面了解面向对象设计的核心思想和技术。

    Java设计模式 J2EE设计模式

    Java设计模式和J2EE设计模式是构建大型企业级应用的核心技术之一,它们提供了解决常见软件设计问题的标准模板。设计模式是经验丰富的开发者在实践中总结出的最佳实践,被广泛应用于J2EE多层系统架构中,包括架构设计...

    设计模式三层结构C#源码

    本资源“设计模式三层结构C#源码”包含了三种经典的设计模式:工厂模式、策略模式和门面模式,以及它们在C#语言中的实现。下面将分别详细介绍这三种设计模式,并结合三层结构的概念进行讨论。 首先,工厂模式是一种...

Global site tag (gtag.js) - Google Analytics