设计模式-简单工厂

本文深入探讨工厂模式的定义、使用场景及优缺点,同时详细解析回调机制的工作原理,包括定义回调接口、处理模板类及具体应用示例,帮助读者理解这两种设计模式在实际编程中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一。
定义:由一个工厂对象决定创建出哪一个产品类的实例
类型:创建型,但不属于go23种设计模式
二。使用场景
工厂类负责创建的对象较少
客户端(应用层)只知道传入工厂类的参数,对于如何创建对象逻辑不关心
优点:
只需要传入一个正确的参数,就可以获取对象,不需要知道创建细节
缺点:工厂类职责过重,增加新的产品,需要修改工厂类的判断逻辑,违背了开闭原则
在计算机程序设计中,回调函数,或简称回调,是指通过函数参数传递到其它代码的,某一块可执行代码的引用。这一设计允许了底层代码调用在高层定义的子程序。定义:所谓的回调,就是程序员A写了一段程序(程序a),其中预留有回调函数接口,并封装好了该程序。程序员B要让a调用自己的程序b中的一个方法,于是,他通过a中的接口回调自己b中的方法。
1.定义一个回调接口:
public interface HandleCallBack {

/** 参数校验 */
public void checkParams();

/** 执行待处理操作,比如模型的创建,修改,删除等 */
public void process();

}
里面定义了需要执行的2个接口方法,参数校验与执行操作。

2.定义一个处理模板类:定义静态方法,可以直接模板调用
public class HandleTemplate {

/** logger */
private static final Logger logger     = Logger.getLogger(LoggerNames.TestLogger);

/**
 * 执行(调用者要实现回调)[执行器]
 * @param result            结果(可以对结果进行处理)
 * @param callBack          回调
 */
public static <T> void execute(Object result, HandleCallBack callBack) {
   
    try {
        // 1.执行业务参数校验
        {
        Profiler.enter("执行参数校验")
            try {
                callBack.checkParams();
            } finally {
                Profiler.release();
            }
        }
        // 2. 执行业务操作
        {
            Profiler.enter("执行业务操作");
            try {
                callBack.process();
            } finally {
                Profiler.release();
            }
        }

        //业务处理成功
        setResultSuccessResultCode(result);

    }catch(Exception e){       LoggerUtil.warn(logger, e);      setResult(result, e,true);    }
  }

3.直接在需要用的地方直接通过静态调用即可,完成业务处理HandleTemplate.execute(orderResult, new HandleCallBack() {
/**
* @see HandleCallBack#checkParams()
*/
@Override
public void checkParams() {
{
// 这里只判断是否为空,每个字段的校验下
// 沉到通用校验组件里
checkNotNull(testRequest, tsetContext);

        // 检查产品码是否有效
        checkProductValid(testRequest);
    }
}

/**
 * @see HandleCallBack#process()
 */
@Override
public void process() {
 
    try {

        // 获取事务,默认仅有引擎层事务
        TransactionTemplateRouter.getTransactionTemplate()
            .execute(new TransactionCallbackWithoutResult() {

                /**
                 * @see TransactionCallbackWithoutResult#doInTransactionWithoutResult(TransactionStatus)
                 */
                @Override
                protected void doInTransactionWithoutResult(TransactionStatus status) {
                    execute(testContext);
                }
            });

    } 

});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值