
# 提取委托
此重构允许基于现有类的成员选定来创建新类。
#### 执行重构
1. 在代码编辑器中，将光标放置在要将其成员提取到新类的类中的任何位置。
2. 单击右键展示上下文菜单，选择**"重构 \> 提取委托..."**。
3. 在打开的**"提取委托"** 对话框中，提供重构参数。
   
   - 提供提取类的名称、包和目标目录。
   
   - 选中**"创建嵌套类"**复选框以在当前类中创建新类。
   
   - 选中**"生成访问器"**复选框，为提取的字段生成getter方法。
   
   - 选中**"提取为枚举"** 复选框，将提取的类创建为枚举类。如果源类包含静态最终字段**static final** **fields**，这是可能的。
   
   - 在**"要提取的成员"** 区域中，选择要提取的类成员。如果选择了**"提取为枚举"** ，则还可以选择要作为枚举常量提取的字段旁边的**"作为枚举"**复选框。
   
   - 在**"可见性"** 选项中，选择要应用于提取的类成员的可见性修改器。要自动应用所需的可见性修改器，以便访问类成员，请选择**"升级"** 选项。
     如下图所示：
     图1提取委托   
     ![](https://support.huaweicloud.com/usermanual-codeartside/zh-cn_image_0000002351680560.png "点击放大") 
   
   
   
   
4. 单击**"重构"**以应用重构。
 
#### 示例
作为示例，将**ExtractDelegate** 类中的**print** 方法提取到一个嵌套的**Printer**枚举类中。
**重构前**
"com\\refactoring\\source\\ExtractDelegate.java"文件内容如下：
```
class ExtractDelegate {
    public static void main(String[] args) {
        new ExtractDelegate().print();
    }
    private static final String message = "Hello World!";
    private void print() {
        System.out.println(message);
    }
}
```
**重构后**
"com\\refactoring\\source\\ExtractDelegate.java"文件内容如下：
```
class ExtractDelegate {
    private final Printer printer = new Printer();
    public static void main(String[] args) {
        new ExtractDelegate().print();
    }
    private void print() {
        printer.print();
    }
}
```
同时，生成一个"com\\refactoring\\source\\Printer.java"文件，文件内容如下：
```
package com.refactoring.source;
public class Printer {
    static final String message = "Hello World!";
    public Printer() {
    }
    void print() {
        System.out.println(message);
    }
}
```
