设计模式:单一职责原则
2015-12-21 22:51
316 查看
设计模式:单一职责原则
中文名:单一职责原则英文名:Single Responsibility Principle (SRP)
含义:对于一个类,应该仅有一个引起它变化的原因。通俗讲:如果有两个完全不一样的功能,就不应该把他们放在一个类中,一个类应该是一组相关性很高的函数,数据的封装。
示例:
package com.csdnnew.csdnlogin; import com.csdnnew.csdnnew.MainActivity; import com.csdnnew.csdnnew.R; import cn.bmob.v3.Bmob; import cn.bmob.v3.BmobUser; import cn.bmob.v3.listener.SaveListener; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.Window; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class LoginActivity extends Activity implements OnClickListener{ private Button buttonLogin; private Button buttonRegister; private EditText textUserName; private EditText textPassword; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.login); buttonLogin = (Button)findViewById(R.id.bnLogin); buttonRegister = (Button)findViewById(R.id.bnRegister); buttonLogin.setOnClickListener(this); buttonRegister.setOnClickListener(this); textUserName = (EditText) findViewById(R.id.userNameText); textPassword = (EditText) findViewById(R.id.passwdText); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.bnLogin: final BmobUser user=new BmobUser(); String userName=textUserName.getText().toString(); String password=textPassword.getText().toString(); //与数据库中的信息进行比对,成功返回成功,失败返回失败的信息 user.setUsername(userName); user.setPassword(password); /* *用户登录 */ user.login(LoginActivity.this,new SaveListener() { @Override public void onSuccess() { Toast.makeText(LoginActivity.this,"登录成功",Toast.LENGTH_SHORT).show(); Intent intent = new Intent(); intent.setClass(LoginActivity.this, MainActivity.class); startActivity(intent); } @Override public void onFailure(int i, String s) { Toast.makeText(LoginActivity.this,"登录失败",Toast.LENGTH_SHORT).show(); } }); break; case R.id.bnRegister: showRegist(); break; default: break; } } private void showRegist() { //用户注册的方法 String userName=textUserName.getText().toString(); String password=textPassword.getText().toString(); final BmobUser user=new BmobUser(); user.setUsername(userName); user.setPassword(password); /* *用户注册的提交 */ user.signUp(LoginActivity.this,new SaveListener() { @Override public void onSuccess() { Toast.makeText(LoginActivity.this,"注册成功",Toast.LENGTH_SHORT).show(); } @Override public void onFailure(int i, String s) { Toast.makeText(LoginActivity.this,"注册失败"+s,Toast.LENGTH_SHORT).show(); } }); } }
上面是刚开始写的一个android的登陆注册的activity 在这个类中,既实现了登陆方法,也实现了注册方法。在后期的开发中,我们需要添加不同的注册方式,需要添加手机短信验证或者短信验证,而且对于登陆也要支持第三方的登录,如此一来再去改动原来的登录,注册方法尤其困难,稍不注意就会出错,逻辑上也比较复杂。Activity也越来越臃肿。此时,我们应该使用单一职责原则来重构代码:
把activity ,注册 ,登录进行分离,注册和登录单独定义一个类,这样注册类就实现注册方法,登录类只实现登录的功能。
UML类图:
注意:
在使用时我们要注意职责的扩散,比如我们的登录类在登录操作前要进行用户密码长度的检测,对于密码检测这个功能我们是否要定义一个新的类来实现它呢?
这时就要结合具体的情况了。不过我们有这样一个原则:只有逻辑足够简单,才可以在代码级别上违背单一职责原则,只有类中的方法足够少,才可以在方法级别上违反单一职责原则。
相关文章推荐
- Java线程:锁
- LabView调用C#混合模式dll
- 变形金刚
- Inondb中的checkpoint
- php学习日记第九棒(php 基本语法)
- 源码安装svn
- LeetCode 8:String to Integer (atoi)
- 哈希查找
- Beta版本贡献比
- 第二天学习
- C++迭代器失效http://blog.csdn.net/vipvipvip/article/details/6295973
- 【郑轻】[1761]You can do it
- 迪文的DGUS屏-如何在屏幕上显示时间
- 模块——js功能(倒计时,幻灯)
- 为iOS应用提供技术支持
- STL算法库-修改序列式操作(二)
- AWK程序设计语言-翻译
- xargs的理解与简单应用
- scatter file介绍
- swift-基础08-隐式解析,隐式装包,强制装包和断言