打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Android 中的工厂模式(减少 if-else 和 switch-case)

前言

Android 中的工厂模式,目的就是减少 if-else 和 switch-case 的出现,梳理代码的条理,使逻辑更加清晰,下面直接上代码:

1.首先新建一个接口,用来监听我们的操作

public interface StrategyListenter {
   /**
    *
    * @param context 上下文
    * @param result  需要操作的数据
    * @param isHandled   判断是否进行下一步操作
    */

   void execute(Context context, int result, boolean[] isHandled);
}

2.重点来了,策略工厂类

public class StrategFactory {
   private List<StrategyListenter> list = new ArrayList<>();
   private static StrategFactory strategFactory = new StrategFactory();

   /**
    * 单列模式
    *
    * @return
    */

   public static StrategFactory init() {
       return strategFactory;
   }

   /**
    * 添加具体操作的类
    *
    * @param listenter
    * @return
    */

   public StrategFactory add(StrategyListenter listenter) {
       if (listenter != null) {
           list.add(listenter);
       }
       return this;
   }

   /**
    * 调用接口进行操作
    *
    * @param context
    * @param result  可根据实际情况进行修改
    */

   public void Scheduled(Context context, int result) {
       boolean[] isHandled = {false};
       for (StrategyListenter listenter : this.list) {
           if (isHandled[0]) {
               return;
           }
           listenter.execute(context, result, isHandled);

       }

   }

}

3.在Application中声明

public class MyApplication extends Application {

   @Override
   public void onCreate() {
       super.onCreate();
       StrategFactory strategFactory = StrategFactory.init();
       strategFactory.add(new NumberOne());
       strategFactory.add(new NumberTwo());
       strategFactory.add(new NumberThree());
       strategFactory.add(new NumberFour());
   }
}

4.具体的操作类,在这里面可以执行我们想要的操作

public class NumberOne implements StrategyListenter {
   @Override
   public void execute(Context context, int result, boolean[] isHandled) {
       if (result >= 0 && result < 60) {
           DilaogHelper.getDilaog(context, "提示信息", "不及格");
           isHandled[0] = false;
       }
   }
}

5.最后在MianActivity中应用

public class MainActivity extends AppCompatActivity {
   private EditText ed_input;
   private Button btn_submit;
   private int strInputNumber;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       ed_input = (EditText) findViewById(R.id.ed_input);
       btn_submit = (Button) findViewById(R.id.btn_submit);
       btn_submit.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               strInputNumber = Integer.valueOf(ed_input.getText().toString());
               StrategFactory.init().Scheduled(MainActivity.this, strInputNumber);
           }
       });
   }
}

6.自己封装的一个对话框帮助类

public class DilaogHelper {

   public static void getDilaog(Context context, String title, String message){
       new AlertDialog.Builder(context)
               .setTitle(title)
               .setMessage(message)
               .setPositiveButton("确定", null)
               .show();
   }

}

附:代码资源下载地址:
http://download.csdn.net/download/qq_32376365/9942966

与之相关

仿房产销冠 APP 销控表界面-多 RecyclerView 同步滚动

Android 实现 dialog 的 3D 翻转

微信号:code-xiaosheng

公众号

「code小生」

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Android中使用SQLiteOpenHelper管理SD卡中的数据库
Unity接入 百度语音识别 SDK!一篇文章搞定在Unity中实现语音识别!(万字完整教程)
Android网络框架Volley
Android 解决ListView 和 ScrollView 共存冲突的问题
Android 数据存储总结-数据库SQLite的具体使用(附参考代码)
Android 异步加载图片,使用LruCache和SD卡或手机缓存,效果非常的流畅
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服