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

网站如何做百度实名认证品牌设计公司招聘

网站如何做百度实名认证,品牌设计公司招聘,网站建设个人兼职,一般设计网站页面用什么软件做js 使用多态替换条件语句用多态替换条件语句是一种众所周知的重构模式。 如果您不熟悉该模式#xff0c;可以在此处查看 。 但是#xff0c;一旦类中有多个条件检查所基于的字段#xff0c;该基本解决方案便会开始崩溃。 我们将研究一些有关如何使用这些可能性的想法。 有很… js 使用多态替换条件语句 用多态替换条件语句是一种众所周知的重构模式。 如果您不熟悉该模式可以在此处查看 。 但是一旦类中有多个条件检查所基于的字段该基本解决方案便会开始崩溃。 我们将研究一些有关如何使用这些可能性的想法。 有很多方法可以解决因此我们将从最简单到最困难的工作始终使用简单的示例来尽可能减少混乱。 那么最简​​单的情况是什么 看一看 public class ClassWithConditionals {private boolean conditional1;private EnumeratedType conditional2;public ClassWithConditionals(boolean cond1, EnumeratedType cond2){conditional1 cond1;conditional2 cond2;}public void method1(){if(conditional1){//do something}else{//do something else}}public void method2(){switch(conditional2){case CASE1://do somethingbreak;case CASE2://do something elsebreak;case CASE3://do something entirely differentbreak;}} }enum EnumeratedType {CASE1,CASE2,CASE3 } 因此在此示例中我们有ClassWithConditionals在其方法中使用的两个不同字段。 在一个合适的示例中您将假设使用的方法不只是给定的两个但在示例中我们只需要两个。 如果每种条件只使用一种方法则无需担心因为维护成本仍然很低。 但是只要执行这种条件检查的方法数量增加就应该考虑进行这种重构。 通常如果您要遵循用多态替换条件您将最终得到六个类来解决此问题 boolean和enum每种组合都需要一个。 取而代之的是我们将使用合成。 那么第一步是什么 首先我们可能应该使用enum类型。 enum可以有自己的方法可以以允许其根据特定enum做不同事情的方式定义这些方法。 因此让我们将enum eratedType更改为如下形式 enum EnumeratedType {CASE1(){public void doSomething(){//do something}},CASE2(){public void doSomething(){//do something else}},CASE3(){public void doSomething(){//do something entirely different}};public abstract void doSomething(); } 现在 method2仅需要将自身委托给conditional2.doSomething() 。 现在让我们修复boolean 。 我们创建一个接口该接口对所有非封装类为进行测试可能还有该包都私有称为Conditional1 。 然后我们用True和False对其进行子类化。 这是代码 interface Conditional1 {static Conditional1 TRUE new True();static Conditional1 FALSE new False();void doSomething(); }class True implements Conditional1 {public void doSomething(){//do something} }class False implements Conditional1 {public void doSomething(){//do something else} } 我决定在接口上创建TRUE和FALSE实例的原因很简单它们都是无状态类这意味着每个实例都具有多个实例是没有意义的。 它还允许我们像enum一样调用它们。 同样现在主要类只需要委托。 这是固定类现在的样子 public class ClassWithConditionals {public static ClassWithConditionals with(boolean cond1, EnumeratedType cond2){Conditional1 conditional1;if(cond1)conditional1 Conditional1.TRUE;elseconditional1 Conditional1.FALSE;return new ClassWithConditionals(conditional1, cond2);}private Conditional1 conditional1;private EnumeratedType conditional2;ClassWithConditionals(Conditional1 cond1, EnumeratedType cond2){this.conditional1 cond1;this.conditional2 cond2;}public void method1(){conditional1.doSomething();}public void method2(){conditional2.doSomething();} } 这里有些奇怪。 我们已经用另一个替换了一个条件。 我们的构造函数足以接受一个Conditional1 但是我们有一个静态工厂方法该方法仍然采用boolean并对此进行条件检查。 考虑到从技术上讲除非有多种方法在进行检查否则我们不会重构此代码因此我们进行了许多检查并将其归为一类。 同样在工厂中通常认为有条件的还可以将所有检查都强制在一个地方并允许多态性从那里接管。 您不必使用静态工厂方法作为工厂但是它是最快速最简单的即时设置方法。 允许调用新ClassWithConditionals对象的创建代码的代码仍然可以按过去的方式传递boolean的另一个好处是它允许我们封装和隐藏基于条件的类的实现细节。 新ClassWithConditionals创建者无需担心创建Conditional1对象甚至无需知道它的存在。 我们仍然希望构造函数接受Conditional1对象这有两个原因1它将条件逻​​辑保存在工厂中而不是构造函数中后者是首选并且2它允许我们传递Conditional1对象的测试双精度。 实际上由于第2点我们应该经常考虑将enum转换为更类似于Conditional1的静态实例。 这将允许您更多地使用测试双打。 它还将有助于继承或通过合成进行扩展这将在稍后进行讨论。 可以想到很多小变化。 首先条件boolean不需要boolean或enum 。 可以有一组基于数字或其他条件的条件表达式。 通常在这些情况下我们用小的帮助程序方法替换支票以使其更清晰即if(numberOfPeople 3)...变成if(isACrowd(numberOfPeople))... 我们可以更进一步并创建通过工厂创建的GroupsOfPeople层次结构。 如果工厂的值为1则返回SinglePerson 给定2则返回Company对象 给定3或更多它将返回Crowd对象。 这些对象中的每个对象都有其自己的方法这样可以帮助减少原始类中的代码量。 另一个变化是当不同的条件字段集分层在一起时 if(condition1 condition2)等。 为了解决这个问题您可以走继承路线并创建爆炸式的类以覆盖所有组合。 另一种选择是用较小的层次结构替换一个条件对象该层次结构接受委托方法中的其他条件对象在那里它仍然具有一些条件代码但是可读性更强。 例如您可以将使用两个布尔值的类转换为如下形式 public class ClassWithConditionals {public static ClassWithConditionals with(boolean condition1, boolean condition2){Conditional1 cond1;if(condition1)cond1 Conditional1.TRUE;elsecond1 Conditional1.FALSE;return new ClassWithConditionals(cond1, condition2);}private Conditional1 condition1;private boolean condition2;ClassWithConditionals(Conditional1 condition1, boolean condition2){this.condition1 condition1;this.condition2 condition2;}public void method(){condition1.method(condition2);} }interface Conditional1 {static Conditional1 TRUE new True();static Conditional1 FALSE new False();void method(boolean condition2); }class True implements Conditional1 {public void method(boolean condition2){if(condition2){//do something}else{//do something else}} }class False implements Conditional1 {public void method(boolean condition2){if(!condition2){//do something really different}//and do this} } Condition1的method接受一个布尔值然后使用它进行更多的条件处理。 此外如果全部逻辑允许您可以创建一组类来替换其中一个条件然后让其创建代码接受其他条件以便确定其一部分创建。 例如 public class ClassWithConditionals {public static ClassWithConditionals from(boolean condition1, boolean condition2){return new ClassWithConditionals(Conditional1.from(condition1, condition2));}private Conditional1 conditionOne;ClassWithConditionals(Conditional1 conditionOne){this.conditionOne conditionOne;}public int method(){return conditionOne.method() * -6;} }interface Conditional1 {static Conditional1 from(boolean condition1, boolean condition2){if(condition1)return True.with(condition2);elsereturn False.with(condition2);}int method(); }class True implements Conditional1 {public static True with(boolean condition2){if(condition2)return new True(5);elsereturn new True(13);}private int secondary;public True(int secondary){this.secondary secondary;}public int method(){return 2 * secondary;} }class False implements Conditional1 {public static False with(boolean condition2){if(condition2)return new False((x, y) - x - y, 31);elsereturn new False((x, y) - x * y, 61);}private final BinaryOperator operation;private final int secondary;public False(BinaryOperator operation, int secondary){this.operation operation;this.secondary secondary;}public int method(){return operation.apply(4, secondary);} } 对于True 第二个条件决定method计算中的次要数字。 在False 它会执行此操作并找出要应用于计算的运算符。 我不确定是否会发生类似的事情但是如果确实发生了您现在知道了一种解决方法。 总的来说这整套重构实质上将代码从单个类更改为Facade。 它需要大量的新类并且使您可以使用与以前的单个类几乎完全相同的方式来使用整个工具包和kaboodle唯一真正的区别是调用静态工厂方法而不是构造函数。 这不是特别重要 我只是想向您指出。 希望您不必担心继承或“通过合成扩展”此类。 但是您可能必须这样做。 如果您要编写的扩展仅真正改变了条件对象的功能则可以简单地编写一个新的Factory为构造函数提供一组新的条件对象。 例如您可以将此静态工厂方法添加到ClassWithConditionals的最新版本中 public static ClassWithConditionals different(int value) {return new ClassWithConditionals(new SimpleConditional1(value)); } 与SimpleConditional1看起来像这样 class SimpleConditional1 implements Conditional1 {private final int value;public SimpleConditional1(int value){this.value value;}public int method(){return value;} } 除此之外您还可以提供原始需要的任何条件对象并覆盖您需要覆盖的所有方法。 因此这就是我用更多的OO选项替换多个条件的结果。 您还有其他方法可以做到吗 您是否有一个无法奏效的示例您想让我大惊小怪 让我知道我会解决。 谢谢阅读。 翻译自: https://www.javacodegeeks.com/2015/01/replacing-multiple-conditionals-with-polymorphism-and-composition.htmljs 使用多态替换条件语句
http://www.pierceye.com/news/278198/

相关文章:

  • 分析某个网站建设百度知道一下首页
  • 贵池区城乡与住房建设网站建站快车是什么
  • 建站程序aspiis 默认网站 删除
  • 手机开网店的免费平台河南seo推广多少钱
  • 网站app推广怎么做wordpress 手机号注册
  • 网站开发到上线需要多久骆驼有没有做网站的公司
  • 中小企业网站建设示范平台wordpress停用react
  • 网站怎样防止攻击seo顾问培训
  • 网站建设后需要维护吗微信安全中心官网
  • dw可以做h5网站设计素材网站0
  • 建设银行郑州中心支行网站青海商会网站建设公司
  • 国外小型网站中国视觉设计网
  • 沈阳专业网站制作团队泰安网络软件公司
  • 网站建设招聘兼职0基础建站教程
  • 如何从零开始做网站文学网站建设平台
  • 企业网站的网址通常包含dchaser wordpress
  • 什么是做网站flash是怎么做网站的
  • 什么是速成网站石家庄网站建设就找
  • 张家界网站建设要求滨州网站建设费用
  • wordpress订阅插件南昌优化排名推广
  • 国外做网站公司能赚钱吗wordpress登录锚点弹
  • 微网站平台微网站建设方案邢台市有几个区几个县
  • 茶叶外贸网站建设中国建设银行是国企还是央企
  • 成都网站建设公司有哪些内容必应搜索
  • 青岛建设集团招聘信息网站公司官网怎么制作
  • 本溪网站开发公司电话县蒙文网站建设汇报
  • 广州建网站有哪些怎么做网站建设赚钱
  • led视频网站建设邯郸建设信息网站
  • 开发网站培训班网站详情页用cdr做可以吗
  • 相亲网站开发与设计报告广州网站维护