设计模式:单一职责原则

设计模式:单一职责原则

中文名:单一职责原则
英文名: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类图:



注意:

在使用时我们要注意职责的扩散,比如我们的登录类在登录操作前要进行用户密码长度的检测,对于密码检测这个功能我们是否要定义一个新的类来实现它呢?
这时就要结合具体的情况了。不过我们有这样一个原则:只有逻辑足够简单,才可以在代码级别上违背单一职责原则,只有类中的方法足够少,才可以在方法级别上违反单一职责原则。




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值