`
zhangsk
  • 浏览: 31379 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

重构-保护

阅读更多
重构前的代码,使用字符串处理状态
package org.zsk.refact;

public class SystemPermission {
private String state;
private boolean granted;

public final static String REQUESTED = "REQUESTED";
public final static String CLAIMED = "CLAIMED";
public final static String DENIED = "DENIED";
public final static String GRANTED = "GRANTED";

public SystemPermission() {
// TODO Auto-generated constructor stub
state = REQUESTED;
granted
= false;
}


public void claimed(){
if (state.equals(REQUESTED)){
state
= CLAIMED;
}

}


public void denied(){
if (state.equals(CLAIMED))
state
= DENIED;
}


public void granted(){
if (state.equals(CLAIMED)){
state
= GRANTED;
granted
= true;
}

}


public boolean isGranted(){
return granted;
}


public String getState(){
return state;
}


/** *//**
*
@param args
*/

public static void main(String[] args) {
// TODO Auto-generated method stub
SystemPermission permission = new SystemPermission();
System.out.println(permission.getState());


}


}


重构后的代码,使用类来保护状态不会被吴改。
package org.zsk.refact;

public class SystemPermissionRf1 {
private boolean granted;
private PermissionState permission;

// public final static String REQUESTED = "REQUESTED";
// public final static String CLAIMED = "CLAIMED";
// public final static String DENIED = "DENIED";
// public final static String GRANTED = "GRANTED";

public SystemPermissionRf1() {
setState(PermissionState.REQUESTED);
granted
= false;
}


public void claimed(){
if (getState().equals(permission.REQUESTED)){
setState(permission.CLAIMED);
}

}


public void denied(){
if (getState().equals(permission.CLAIMED)){
setState(permission.DENIED);
}

}


public void granted(){
if (getState().equals(permission.CLAIMED)){
setState(permission.GRANTED);
granted
= true;
}

}


public boolean isGranted(){
return granted;
}


private void setState(PermissionState permission){
this.permission = permission;
}


public String getState(){
return permission.toString();
}



/** *//**
*
@param args
*/

public static void main(String[] args) {
// TODO Auto-generated method stub
SystemPermissionRf1 permission1 = new SystemPermissionRf1();
System.out.println(permission1.getState());


}



}





package org.zsk.refact;


public final class PermissionState{
private final String name;

PermissionState(String name)
{
this.name = name;
}


public String toString(){
return name;
}


public final static PermissionState REQUESTED = new PermissionState("REQUESTED");
public final static PermissionState CLAIMED = new PermissionState("CLAIMED");
public final static PermissionState DENIED = new PermissionState("DENIED");
public final static PermissionState GRANTED = new PermissionState("GRANTED");
}

分享到:
评论

相关推荐

    重构-改善既有代码的设计.zip

    5. **测试驱动开发**:重构时,单元测试扮演着保护伞的角色。在修改代码前,确保有充分的测试覆盖,以防止引入新的bug。重构后,通过测试验证功能的正确性。 6. **使用重构工具**:Java IDE如Eclipse和IntelliJ ...

    重构-改善即有代码的设计

    此外,重构应在自动化测试的保护下进行,确保重构过程中不引入新的错误。 4. **重构的方法**:书中列举了大量的重构模式,如提取函数、提取类、替换魔法数字为常量、移动函数等。这些模式提供了一套标准化的步骤,...

    重构-改善既有代码设计

    开发者在进行重构之前,会先编写单元测试以确保代码的原有功能,然后在测试的保护下进行重构。如果重构导致了错误,快速失败的单元测试会立即发现,从而可以及时回滚更改,保证了软件的稳定性和可靠性。 重构的实践...

    重构-改善既有代码的设计.pdf

    ### 重构——改善既有代码的设计 #### 知识点概览 重构是一种系统化的方法,旨在改进现有软件的内部结构而不改变其外部行为。通过重构,可以提高代码的可读性和可维护性,并减少未来的修改成本。《重构-改善既有...

    重构-改善既有代码的设计

    - **作用**:保护数据的安全性,同时提供更简洁的接口。 5. **提取类(Extract Class)** - **应用场景**:当一个类包含太多的功能时,可以考虑将其中的一部分功能分离到新的类中。 - **作用**:降低类的复杂度,...

    重构-改善既有代码的设计_简体中文

    ### 重构 - 改善既有代码的设计 #### 知识点概述 《重构 - 改善既有代码的设计》是一本经典的软件工程书籍,由著名软件架构师Martin Fowler撰写。本书详细介绍了通过一系列小规模的代码改进操作(即重构),来逐步...

    重构-改善既有代码的设计

    3. **单元测试**:重构前确保有充分的单元测试覆盖,因为重构可能引入错误,而单元测试能及时发现这些错误,保护了软件的稳定性。 4. **提取方法**:当一个方法过于庞大时,可以将其拆分为多个较小的、专注单一职责...

    重构-改善既有代码的设计(中文版)

    ### 重构——改善既有代码的设计 #### 知识点概览 **重构**是指在不改变软件外部行为的前提下,对代码进行结构上的调整,以提高其可读性、可维护性和扩展性。这一过程通常涉及一系列经过验证的技术,称为重构模式...

    交易流程重构-完整版.pdf

    《交易流程重构——完整版》的文档主要涵盖了电子...该交易流程重构旨在优化电商交易体验,保护买家和卖家的权益,同时提高交易效率和满意度。通过明确的规则和流程,确保了交易过程的公正和透明,减少了纠纷的可能性。

    31天重构指南--代码重构(refactoring)

    无论是通过封装集合来保护内部数据结构不受外界干扰,还是通过移动方法来优化类的设计,都是重构实践中的常见策略。在实际项目开发中,开发者应该根据具体情况灵活应用这些重构技巧,不断优化代码结构,提高软件产品...

    重构(1-6).pdf

    - **应用场景**:为了保护对象的状态不被外部直接修改,可以通过封装值域实现。 - **实现方式**:将字段设为私有,并提供公共的getter和setter方法。 10. **提煉类 (Extract Class)** - **应用场景**:当一个类...

Global site tag (gtag.js) - Google Analytics