您的位置:首页 > 其它

设计模式:单一职责原则

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类图:



注意:

在使用时我们要注意职责的扩散,比如我们的登录类在登录操作前要进行用户密码长度的检测,对于密码检测这个功能我们是否要定义一个新的类来实现它呢?
这时就要结合具体的情况了。不过我们有这样一个原则:只有逻辑足够简单,才可以在代码级别上违背单一职责原则,只有类中的方法足够少,才可以在方法级别上违反单一职责原则。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: