策略和工厂模式小例子

策略和工厂模式小例子

目录结构

在这里插入图片描述

1 创建策略接口

package com.example.myspingbootdemo.strategy;

public interface IStrategy <P>  {

    Integer getType ();
    
    
    default void preCheck(){
        System.out.println("precheck");
    }
}

2 构建工厂

import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;

@Component
@RequiredArgsConstructor
public class Factory<T> implements InitializingBean {
    private final List<IStrategy<T>> iStrategyList;

    private Map<Integer,IStrategy<T>> strategyMap;


    @Override
    public void afterPropertiesSet() throws Exception {
        strategyMap = iStrategyList.stream()
                .collect(Collectors.toMap(IStrategy :: getType, Function.identity(),
                        (existing,replacement) -> replacement));
    }

    public IStrategy<T> get (Integer type){
      return   strategyMap.get(type);
    }
}

3 构建实现类 (1)

在这里插入代码片

4 构建实现类(2)




package com.example.myspingbootdemo.strategy.impl;

import com.example.myspingbootdemo.strategy.IStrategy;
import com.example.myspingbootdemo.strategy.StrategyEnum;
import org.springframework.stereotype.Service;

@Service
public class IStrategyTwoImpl implements IStrategy {

    @Override
    public Integer getType() {
        return StrategyEnum.TYPE_TWO.getCode();
    }

    @Override
    public void preCheck() {
        System.out.println(StrategyEnum.TYPE_TWO.getDesc());
    }
}



5 业务实现类

package com.example.myspingbootdemo.strategy;

import cn.hutool.core.lang.Assert;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

@Service
@RequiredArgsConstructor
public class BusService<T> {
    private final Factory<T> factory;

    public void testStartegy(Integer type){
        IStrategy<T> iStrategy;
        iStrategy = factory.get(type);
        Assert.notNull(iStrategy,"暂时无法出来");
        iStrategy.preCheck();
    }
}

最近感悟

 生命中最重要的不是你遇到了什么,而是你如何应对。面对挑战和困难,不要退缩,而是勇敢地迎接它们。
 每一次的跌倒都是一次重生的机会,每一次的失败都是一次重新开始的机会。
 不要让别人的眼光和评价左右你的人生,你的价值和意义是由自己创造的。
 相信自己,坚持自己的梦想,你一定能够实现自己的人生价值,成就自己的辉煌
当然,这里是一个简单的C++代码示例,演示如何通过工厂模式策略模式来调用不同类型的策略。 假设我们有如下的类结构: ```cpp #include <memory> #include <string> // 操作接口 class IOperation { public: virtual ~IOperation() {} virtual void executeTask() = 0; }; // 抽象工厂 class AbstractFactory { public: virtual ~AbstractFactory() {} virtual std::unique_ptr<IOperation> createStrategy(const std::string& taskType) = 0; }; // 注册策略 class RegisterStrategy : public IOperation { public: void executeTask() override { std::cout << "Executing Register Task..." << std::endl; } }; // 匹配策略 class MatchStrategy : public IOperation { public: void executeTask() override { std::cout << "Executing Match Task..." << std::endl; } }; // 抽象工厂实现 class ConcreteFactory : public AbstractFactory { public: std::unique_ptr<IOperation> createStrategy(const std::string& taskType) { if (taskType == "register") { return std::make_unique<RegisterStrategy>(); } else if (taskType == "match") { return std::make_unique<MatchStrategy>(); } else { throw std::runtime_error("Invalid task type"); } } }; // 工厂类使用者 class Client { private: std::shared_ptr<AbstractFactory> factory; public: void setFactory(AbstractFactory* factory) { this->factory = factory; } void executeTask(const std::string& taskType) { try { auto strategy = factory->createStrategy(taskType); strategy->executeTask(); } catch (const std::exception& e) { std::cerr << "Error: " << e.what() << std::endl; } } }; int main() { ConcreteFactory factory; Client client; client.setFactory(&factory); // 调用策略 client.executeTask("register"); // 输出: Executing Register Task... client.executeTask("match"); // 输出: Executing Match Task... return 0; } ``` 在这个例子中,`Client`类负责调用工厂方法来创建策略,然后执行相应的任务。你可以根据需要更换任务类型来切换使用的策略
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值