- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
for (Field field : declaredFields) {
Class<?> type = field.getType();
String key = field.getName();
Element result = resultMap.addElement("result");
result.addAttribute("column", StringChangeUtils.CamelhumpToUnderline(key).toLowerCase());
result.addAttribute("property", key);
switch (type.getSimpleName()) {
case "String":
result.addAttribute("jdbcType", "VARCHAR");
break;
case "Integer":
result.addAttribute("jdbcType", "NUMERIC");
break;
case "Double":
result.addAttribute("jdbcType", "NUMERIC");
break;
case "Date":
result.addAttribute("jdbcType", "DATE");
break;
default:
result.addAttribute("jdbcType", "VARCHAR");
break;
}
}
其实很简单 if里面的多个魔法常量 和HashMap里面的key是不是可以等比互换呢!! 所以我们核心就是从一个类似于HashMap这种的容器里去获取某一个key,就等同于进去到了if 的对应分支 而if 的对应分支 里面的业务,交给HashMap的Value去调方法完成没毛病把 。
--比如上述代码是判断字段类型 --->通用对象接口是对象类型的·抽象· -- 那么这个对象具有什么能力,就是对应原始if分支的逻辑处理 呗,, -- 我这里是根据不同的字段类型往一个Element元素对象中填充属性。 -----所以抽出行为为往Element元素对象中填充属性 。
public interface FileTypeInterfaceStrategy {
void addAttribute(Element element);
}
1. 比如 类型抽象 有String 类型
2. 比如 类型抽象 有Double 类型
3. 比如 类型抽象 有DATE 类型
4. 等等。。。。。
public class StringStrategy implements FileTypeInterfaceStrategy {
@Override
public void addAttribute(Element element) {
element.addAttribute("jdbcType", "VARCHAR");
}
}
public class IntegerStrategy implements FileTypeInterfaceStrategy {
@Override
public void addAttribute(Element element) {
element.addAttribute("jdbcType", "NUMERIC");
}
}
public class DoubleStrategy implements FileTypeInterfaceStrategy {
@Override
public void addAttribute(Element element) {
element.addAttribute("jdbcType", "NUMERIC");
}
}
public class DateStrategy implements FileTypeInterfaceStrategy {
@Override
public void addAttribute(Element element) {
element.addAttribute("jdbcType", "DATE");
}
}
public class DefaultStrategy implements FileTypeInterfaceStrategy {
@Override
public void addAttribute(Element element) {
element.addAttribute("jdbcType", "VARCHAR");
}
}
思考 if选择分支,第一件事是不是拿到一个值去判断属于某一个魔法常量呢!
其实 抽离成对象之后业同理需要知道,这里的上文行为需要下文的那一个对象的实现去处理。。
比如,上文中拿到String、类型,我需要使用String类型的实现类去调业务方法。
比如,上文中拿到Integer、类型,我需要使用Integer类型的实现类去调业务方法。
if的分支属性和业务行为被抽离成对象--但是还有个东西没有抽离,就是IF本身的分支选择结构没抽出来 对不对 这时候联想到第一句话:if本身业务结构还需要抽离-----它本身和HashMaP这种结构类似 是不是可以用它完成替换 。
使用工厂方法代理策略的选择执行:其实很简单,就是new 一个HashMap,然后把所有的策略对象和Key放入HashMap,使用时候去容器里面取出来执行业务方法就完事 。
public class FileTypeStrategyFactory {
private FileTypeStrategyFactory() {
}
private static final FileTypeStrategyFactory bean = new FileTypeStrategyFactory();
public static FileTypeStrategyFactory getBean() {
return bean;
}
/**
* 声明存储容器
*/
private static Map<String, FileTypeInterfaceStrategy> factoryMap;
static {
factoryMap = new HashMap<>();
factoryMap.put("String", new StringStrategy());
factoryMap.put("Integer", new IntegerStrategy());
factoryMap.put("Double", new DoubleStrategy());
factoryMap.put("Date", new DateStrategy());
factoryMap.put("default", new DefaultStrategy());
}
public FileTypeInterfaceStrategy getStrategy(String classType) {
return factoryMap.get(classType) != null ? factoryMap.get(classType) : factoryMap.get("default");
}
}
Element resultMap = document.addElement("resultMap");
// 添加根节点属性
resultMap.addAttribute("id", aClass.getSimpleName() + "Map");
resultMap.addAttribute("type", classForName);
resultMap.addAttribute("extends", "BaseResultMap");
for (Field field : declaredFields) {
Class<?> type = field.getType();
String key = field.getName();
Element result = resultMap.addElement("result");
result.addAttribute("column", StringChangeUtils.CamelhumpToUnderline(key).toLowerCase());
result.addAttribute("property", key);
FileTypeStrategyFactory factory = FileTypeStrategyFactory.getBean();
FileTypeInterfaceStrategy strategy = factory.getStrategy(type.getSimpleName());
strategy.addAttribute(result);
}
最后此篇关于用策略模式干掉代码里大量的if-eles或则Swatch,提升B格由面向过程转为面向对象的文章就讲到这里了,如果你想了解更多关于用策略模式干掉代码里大量的if-eles或则Swatch,提升B格由面向过程转为面向对象的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我使用的是来自 woothemes 的免费 wordpress 主题,Swatch 主题。我不知道是否有人也使用这个主题。我遇到了一些问题。当帖子很短时。主题的页脚无法到达底部。留了一 block 空
我有这个代码: from time import localtime, timezone def itime(): """Calculate and return Swatch Interne
是否有人编写了一个 jQuery 查询颜色选择器,让您可以从预先确定的颜色列表中选择颜色?类似于电子商务网站上的产品颜色选择器。 我所做的大部分搜索都揭示了很多通用目的,可以在 rgb 光谱中选择任何
有没有办法制作一个 Javascript Illustrator 脚本来选择文档中具有特定颜色的所有内容?我无法在任何地方找到任何信息。我知道您可以使用“选择”下拉菜单执行我要求的操作,但我需要将其作
我正在从位图中生成调色板。我正在确保我得到一个有效的充满活力的样本并将文本颜色设置为该样本的 getTitleTextColor() .文档说: Returns an appropriate colo
我一直致力于使用 PHP 将色板保存为图像,我在这方面取得了领先,到目前为止,它保存了第一种颜色、最后一种颜色和黑色——但将最后一种颜色迭代了三个 block 。 $rgb_set) { if ($
如何将透明度值添加到调色板的色板?就像我将颜色(swatch.getRGB())添加到线性布局一样,它显示纯色。而且我不想使用 alpha,因为它也会使布局中的其他项目透明。 我的代码 fragmen
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 5年前关闭。 Improve this questi
我正在使用 Magento 的 Amasty Color Swatch 扩展,当以批发客户身份登录时,在产品 ListView 中选择一个选项时,选项会完全消失。 我在控制台中收到 JavaScrip
我想让我的用户能够选择 Swatch Internet Time作为他们的时间格式。 我现在的尝试: function startTime(){ var d = new Date(),
MagicZoomPlus: fatal error -未捕获错误:调用成员函数 getShowSwatchTooltip() module-swatches/view/frontend/templa
我是一名优秀的程序员,十分优秀!