zoukankan      html  css  js  c++  java
  • 代码优化--策略模式的四种表现

    优化
    if (type.equal("simple")) {
    简单模式 SimplepolymorphismService
    } else if (type.equal("middle")) {
    中等 MiddlepolymorphismService
    } else if (type.equal("hard")) {
    复杂 HardpolymorphismService
    }
    结构。


    1.多态的使用

    main代码
    SimplePolymorphismService simple = new SimplePolymorphismService();
            MiddlePolymorphismService middle = new MiddlePolymorphismService();
            HardPolymorphismService hard = new HardPolymorphismService();
            map.put("simple", restart);
            map.put("middle", middle);
            map.put("hard", hard);
    
            PolymorphismService poly = (PolymorphismService) map.get("simple");
            try {
                poly.run();
            } catch (Exception e) {
                e.printStackTrace();
            }

    父类代码
    public interface PolymorphismService {
        void run() throws Exception;
    }

    多个子类

    class MiddlePolymorphismService implements PolymorphismService {
    
        public void run() throws Exception {
            System.out.println("middlePolymorphismService");
        }
    }
    
    class HardPolymorphismService implements PolymorphismService {
    
        public void run() throws Exception {
            System.out.println("hardPolymorphismService");
        }
    }

    此方法map需要手动放置,在使用中添加新的策略,可能会忽略放置。

    2.枚举

    在枚举类中定义执行方法

    枚举类代码

    public enum EnumBetterBetter {
    FAST {
    void run () { System.out.println("FAST enum"); } }, simple { void run () { System.out.println("simple nume"); } } ; abstract void run();
    }

    main执行代码
    public static void main(String[] args) {
    
            EnumBetterBetter enumBetter =  EnumBetterBetter.valueOf("FAST");
            enumBetter.run();
    
            EnumBetterBetter enumBetter1 =  EnumBetterBetter.valueOf("simple");
            enumBetter1.run();
    
            EnumBetterBetter enumBetter3 =  EnumBetterBetter.FAST;
            enumBetter3.run();
    
            EnumBetterBetter enumBetter4 =  EnumBetterBetter.simple;
            enumBetter4.run();
            
        }    

    执行结果

    FAST enum
    simple nume
    FAST enum
    simple nume

    3.使用 Optional

    Optional主要用于非空判断,由于是jdk8新特性,所以使用的不是特别多,但是用起来真的爽。

    主要解决

    if(user == null) {

    }else {

     这种情况。

    具体执行代码

    Optional<String> userOptional = Optional.ofNullable(null);
            userOptional.map(action1).orElse(action2);
    or 使用lambda表达式
    Optional<String> userOptional = Optional.ofNullable(null);
            userOptional.map(list -> {
                return null;
            }).orElse("there have nothing");

    4.数组小技巧

    来自google解释,这是一种编程模式,叫做表驱动法,本质是从表里查询信息来代替逻辑语句。

    比如通过月份来获取当月的天数。

    问题代码

    int getDay (int month) {
            if (month == 1) return 31;
            if (month == 2) return 29;
            if (month == 3) return 31;
            if (month == 4) return 30;
            if (month == 5) return 31;
            if (month == 6) return 30;
            if (month == 7) return 31;
            if (month == 8) return 31;
            if (month == 9) return 30; 
            if (month == 10) return 31;
            if (month == 11) return 30;
            if (month == 12) return 31;
        }

    解决方式

    int monthDay[] = {31,29,31,30,31,30,31,31,30,31,30,31};
    
        int getDays(int month) {
            return monthDay[--month];
        }
     
  • 相关阅读:
    C++ 模板函数指针
    MaxScript Object_Oriented_Struct 使用strut 模拟面向对像编程中的 Class
    C# Managed DirectX 学习笔记 一 (基础环境,画三角形,输入的处理)
    C# 代理做为函数参数的时候
    mongoose基本增删改查
    JS中的reduce()详解
    JS中every()和some()的用法
    JS数组遍历方法集合
    第一篇博文
    gb2312 了解
  • 原文地址:https://www.cnblogs.com/zhanghao1799/p/11023047.html
Copyright © 2011-2022 走看看