当前位置: 首页 > news >正文

购物网站建设比较好的wordpress 创业

购物网站建设比较好的,wordpress 创业,网络系统管理和配置,开发工具都有哪些背景: 根据《java8实战》把第二章简单概括一下。 在软件工程中,一个最重要的问题是,用户的需求会一直变化,如何应对不断变化的需求,并且把工作量降到最低是需要考虑的,而行为参数化就是一个处理频繁变更需…

背景:

根据《java8实战》把第二章简单概括一下。

在软件工程中,一个最重要的问题是,用户的需求会一直变化,如何应对不断变化的需求,并且把工作量降到最低是需要考虑的,而行为参数化就是一个处理频繁变更需求的软件开发模式。

在我看来,行为参数化,是拿出一块代码段,准备好却不去执行,这个代码块会被其他部分调用,意味着可以推迟这个代码的执行。

下面用在库存中筛选苹果的案例来说明。

第一版:筛选绿苹果

public static List<Apple> filterGreenApples(List<Apple> inventory) {List<Apple> result = new ArrayList<>();for(Apple app: inventory) {if("green".equals(apple.getColor())) {result.add(apple);}}return result;
}

上面的代码可以就是筛选绿色苹果,但是如果现在需求变了,需要筛选红色苹果,那么第一反应是在上面的函数入参中,加入颜色条件来匹配。

第二版:颜色作为参数

public static List<Apple> filterGreenApples(List<Apple> inventory, String color) {List<Apple> result = new ArrayList<>();for(Apple app: inventory) {if(apple.getColor().equals(color)) {result.add(apple);}}return result;
}
List<Apple> greenApples = filterAppleByColor(Inventory, "green");
List<Apple> greenApples = filterAppleByColor(Inventory, "red");

这样可以得到最终答案,但是又出现了一个问题,现在需求变成需要能区分轻苹果和重苹果.

于是把上面代码拷贝一份又写了个针对重量的

第三版:重量作为参数

public static List<Apple> filterGreenApples(List<Apple> inventory, int weight) {List<Apple> result = new ArrayList<>();for(Apple app: inventory) {if(apple.getWeight() > weight) {result.add(apple);}}return result;
}

这样虽然可以,但是打破了DRY(Don't Repeat Yourself, 不要重复自己)软件工程原则,当然不重复情况下,还可以加上一个标志位来判断是对哪个条件进行查询,如下

第四版:颜色和重量统一查询函数

public static List<Apple> filterGreenApples(List<Apple> inventory, String color,int weight, boolean flag) {List<Apple> result = new ArrayList<>();for(Apple app: inventory) {if((flag && apple.getColor().equals(color)) || (!flag && apple.getWeight() > weight)){result.add(apple);}}return result;
}

这样的代码可读性很差,并且标志位现在只是颜色和重量,如果再加查询条件,比如产地,形状等,就无法满足需求了.

行为参数化传递代码

考虑将选择的标准进行建模,比如绿色的吗,重量超过150克吗,来返回一个boolean值,这种返回boolean值函数称为”谓词“,定义一个接口来选择标准建模:

public interface ApplePredicate{boolean test(Apple apple);
}

那么就可以又很多实现类了,比如

public class AppleHeavyWeightPredicate implements ApplePredicate {public boolean test(Apple apple) {return apple.getWeight() > 150;}
}public class AppleGreenColorPredicate implements ApplePredicate {public boolean test(Apple apple) {return "green".equals(apple.getColor());}
}

把不同filter方法的不同行为封装起来,称为“策略”,然后再运行时选择一个算法,这个算法族就是applePredicate。

第五版:applePredicate改造后

public static List<Apple> filterApples(List<Apple> inventory, ApplePredicate p) {List<Apple> result = new ArrayList<>();for(Apple app: inventory) {if(p.test(apple)){result.add(apple);}}return result;
}

这样使用灵活多了,假设选择需求变了,组合条件,既要红苹果,又要重量超过150克,那么就再增加一个类实现ApplePredicate就行

public class AppleRedAndHeavyPredicate implements ApplePredicate {public boolean test(Apple apple) {return "red".equals(apple.getColor()) && apple.getWeight() > 150;}
}List<Apple> redAndHeavyApple = filterApples(inventory, new AppleRedAndHeavyPredicate());

 但是这样还不完美,因为现在filterApples入参都需要一个new一个过滤条件相关的对象,并且实现test方法,为了在进一步减少代码,还可以用匿名类和lambda表达式

第六版:匿名类

List<Apple> redAndHeavyApple = filterApples(inventory, new AppleRedAndHeavyPredicate() {public boolean test(Apple apple) {return "red".equals(apple.getColor());}
});

匿名类看起来减少了类的实现代码,但是调用时候还是塞了很多代码。那么就到了最后一个

第七版:Lambda表达式

List<Apple> redAndHeavyApple = filterApples(inventory, (Apple apple) -> "red".equals(apple.getColor()));

这样看起来就干净多了。现在filterApples只是作用于苹果的筛选,我们甚至更进一步,造一个通用filter,用泛型来替代Apple,如下:

public interface Predicate<T> {boolean test(T t);
}public static <T> List<T> filter<List<T> list, Predicate<T> p> {List<T> result = new ArrayList<>();for(T e: list){if(p.test(e)){result.add(e);}        }
}

这样就可以把filter方法用在香蕉,桔子,等等上。这边的Predicate<T>是一个函数式的接口,为了缩短篇幅,会在下个博客讲

http://www.yayakq.cn/news/432308/

相关文章:

  • 电子商务官方网站东莞网站建设哪里好
  • 网站源码带采集怎样开通微信公众号平台
  • 公司做个网站好还是做公众号好如何自己设计装修效果图
  • asp网站仿制网站一般用什么软件做的
  • 移动网站开发语言中国网重庆
  • 免费行情网站软件ipad 设计网站
  • 网站网络设计是怎么做的网页设计师学历要求
  • 建设网站企业网上银行登录入口美团网站开发形式
  • 做网站江西外贸建站行业好做吗
  • 做网站含营销导航网站 win8风格
  • 网站制作推广需要多少钱手工艺品网站建设方案
  • 网站公司企业宗旨网站建设实训个人总结1000字
  • 替朋友做网站厦门网站设计培训公司
  • 贵州省住房和建设厅网网站wordpress软件分享
  • 怎么查那些人输入做网站广州seo团队
  • 金坛做网站365网站
  • 如何用百度上传图片做网站外链frontpage做网站
  • 东莞网站建设员微网站开发案例
  • 企业网站建设如何去规划网页版qq安全中心登录入口
  • django做企业级网站学校校园网站建设服务
  • 无锡网站制作高端网站优化心得
  • 制作介绍的网站模板做瞹网站
  • 网站模板之家免费下载建设信用卡分期购物网站
  • 什么是网站前台电商推广和网络推广的区别
  • 网站站内链接怎么做wordpress标签扩展
  • 网网站建设与设计郑州网站建设找三牛
  • 信丰做网站重庆网站制作设计获客
  • 中山网站建设的公司查询一个网站是用什么系统做的
  • 灯具公司网站模板广告网站建设制作设计服务商
  • 新企业如何在国税网站上做套餐专业网页制作软件都能帮助用户组织和管理