工作中我们会用到设计模式来帮助我们更好的写代码,下面就慢慢的记录我使用到的吧
1、单例模式在这里我用链接温湿度传感器为例,使用socket链接的
import java.net.Socket;
public class SingtonSocket {
private static volatile Socket client = null;
public static Socket getInstance(String ip,Integer port) {
if(client==null) {
synchronized(SingtonSocket.class) {
if (client == null) {
try {
client = new Socket(ip, port);
} catch (Exception e) {
}
}
}
}
return client;
}
}
使用:Socket clientSocket = SingtonSocket.getInstance(hardRecord.getIp(), hardRecord.getPort())策略模式
之前代码是这样的
现在是这样的了
List> strategy = strategyUseService.resolveStrategy(params.getMenuId()+""); List> list = resultDataList(strategy, collect);
第一步定义一个策略接口
import java.util.List;
public interface ExpireStrategy {
String strategy();
List> getExpireData();
}
贴两个策略的实现类
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.ruoyi.system.service.importantService;
@Component
public class importantStrategy implements ExpireStrategy{
@Autowired
importantService importantService;
@Override
public String strategy() {
return "2015";
}
@Override
public List> getExpireData() {
return importantService.getExpireData();
}
}
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.ruoyi.system.service.LibraryService;
@Component
public class LibraryStrategy implements ExpireStrategy{
@Autowired
LibraryService libraryService;
@Override
public String strategy() {
return "2014";
}
@Override
public List> getExpireData() {
return libraryService.getExpireData();
}
}
重点在这
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
@Component
public class StrategyUseService implements ApplicationContextAware{
private Map strategyMap = new ConcurrentHashMap<>();
public List> resolveStrategy(String menuId) {
ExpireStrategy expireStrategy = strategyMap.get(menuId);
if (expireStrategy != null) {
return expireStrategy.getExpireData();
}else {
return new ArrayList<>();
}
}
//把不同策略放到map
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
Map tmepMap = applicationContext.getBeansOfType(ExpireStrategy.class);
tmepMap.values().forEach(strategyService -> strategyMap.put(strategyService.strategy(), strategyService));
}
}
使用
@Autowired StrategyUseService strategyUseService;
List> strategy = strategyUseService.resolveStrategy(params.getMenuId()+""); List> list = resultDataList(strategy, collect);



