模板方法设计模式,让我的代码更加优雅了,这一波不亏

模板方法设计模式属于行为模式的分类,为啥要使用设计模式?

使用设计模式可以重构整体架构代码、提交代码复用性、扩展性、减少代码冗余问题,让我们的代码更直观和优雅。

模板方法模式和策略模式都有相同之处就是有具体的行为实现,所以也是基于工厂模式的实现。

实际应用场景:工厂物料采购,金融支付,第三方数据采集,回调。都可以使用模板方法模式来构建。

某汽车生产厂家,需要采购一批物料,物料,清单,列入打印机材料,上位erp清单材料,还有汽车生产厂家物材,还有仓库硬件设备材料。对应不同的生产厂家,不同的采购方式和流程都会不一样。我们可以用工厂抽取去行为方法,让不同的子类工厂去实现不同的方式,从而达到高类聚,低耦合的方式满足设计模式的原则。

实现原则:实现原则的本身是由工厂提供方法,具体行为实现由特性去实现

汽车生产厂家需要其他公司提供服务和策略。

A公司打印服务

B公司上位物料

C公司汽车配件

静态工厂实现:

package com.xy.design.template.factory;

import com.xy.design.template.abstracts.TemplateAbstract;
import com.xy.design.template.config.ApplicationContextProvider;

/**
 * <p>
 *  模板工厂
 * @author xy
 * @since 2021-11-02
 */
public class TemPlateFactory {
    /**
     * 静态工厂实现
     * @param templateId
     * @return
     */
    public static TemplateAbstract getTeamplateFactory(String templateId){
       TemplateAbstract templateAbstract = (TemplateAbstract) ApplicationContextProvider.getBean(templateId);
       return  templateAbstract;

    }
}

抽象工厂:

package com.xy.design.template.abstracts;

/**
 * <p>
 *  抽象工厂
 * @author xy
 * @since 2021-10-21
 */
public abstract class TemplateAbstract {



    /**
     * 采购
     */
    public abstract   String  procurement();

    /**
     * 结算
     */
    protected  abstract  void settlement();

}

工厂实现:

package com.xy.design.template.factory.impl;

import com.xy.design.template.abstracts.TemplateAbstract;
import com.xy.design.template.common.Constants;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

/**
 * 上位工厂
 */
@Service(Constants.UPPER_PLAN)
@Component
public class UpperFactory extends TemplateAbstract {


    @Override
    public String procurement() {
        return "采购了上位材料----------------";
    }

    @Override
    protected void settlement() {
        System.out.println("上位结算单-------------------");
    }
}
package com.xy.design.template.factory.impl;

import com.xy.design.template.abstracts.TemplateAbstract;
import com.xy.design.template.common.Constants;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

/**
 * 打印工厂
 */
@Service(Constants.PRINT_ARRE)
@Component
public class PrintFactory extends TemplateAbstract {



    @Override
    public String procurement() {
        return "采购了大量打印耗材";
    }

    @Override
    protected void settlement() {
        System.out.println("打印结算单-------------------");
    }
}
package com.xy.design.template.factory.impl;

import com.xy.design.template.abstracts.TemplateAbstract;
import com.xy.design.template.common.Constants;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

/**
 * 汽车工厂
 */
@Service(Constants.CAR_F)
@Component
public class CarFactory extends TemplateAbstract {


    @Override
    public String procurement() {
        return "采购了大量汽车零件";
    }

    @Override
    protected void settlement() {
      System.out.println("汽车结算单-------------------");
    }
}

实现类:我们通过静态工厂指定具体实现就可以了。

package com.xy.design.template.service;

import com.xy.design.template.abstracts.TemplateAbstract;
import com.xy.design.template.config.ApplicationContextProvider;
import com.xy.design.template.factory.TemPlateFactory;
import org.springframework.stereotype.Service;

/**
 * <p>
 *
 * @author xy
 * @since 2021-11-02
 */
@Service
public class TourismServiceImpl implements TourismService {


    @Override
    public String procurement(String templateId) {
        TemplateAbstract templateAbstract = TemPlateFactory.getTeamplateFactory(templateId);
        return templateAbstract.procurement();
    }
}

模板方法模式基于行为模式,模板方法模式和策略模式有共同的特性,都是通过Factory工厂实现,也是用到了抽象和继承。抽象类抽象出方法,定义模板方法,具体的逻辑步骤交给实现工厂去实现,从而达到了骨架逻辑的抽离。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小杨互联网

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值