现在的位置: 首页 > 综合 > 正文

重构 — Replace Subclass with Fields(以值域取代子类)

2018年10月20日 ⁄ 综合 ⁄ 共 1198字 ⁄ 字号 评论关闭

动机(Motivation)

修改这些函数,使它们返回superclass中的某个(新增值域,然后销毁subclasses)

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
public
abstract
class
Person
{
   public 
abstract bool
IsMale();
   public 
abstract string
GetCode();
 
   public
Person CreateMale()
   {
       return
new  Male();
   }
 
   public
Person CreateFemale()
   {
       return
new Female();
   }
}
 
public
class Male : Person
{
 
    public
override bool
IsMale()
    {
        return
true;
    }
 
    public
override string
GetCode()
    {
        return
"M";
    }
}
 
public
class Female : Person
{
 
    public
override bool
IsMale()
    {
        return
false;
    }
 
    public
override string
GetCode()
    {
        return
"F";
    }
}

 

改为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
public
class
Person
{
    private
bool _IsMale;
    private
string _Code;
 
    public
bool IsMale
    {
        get
{ return
_IsMale; }
        set
{ _IsMale = value; }
    }
 
    public
string Code
    {
        get
{ return
_Code; }
        set
{ _Code = value; }
    }
    public
Person(bool
isMale, string
code)
    {
        this._IsMale = isMale;
        this._Code = code;
    }
}
 
public
class Male : Person
{
 
    public
Male()
        :
base(true,
"M")
    { }
}
 
public
class Female : Person
{
    public
Female()
        :
base(false,
"F")
    { }
}

抱歉!评论已关闭.