一、方法

同一个类中的两个方法之间出现了代码的重复,那么可以将重复的代码提取成一个方法来调用。

二、类

两个类之间出现了代码重复,可以将这部分代码提取出来,组成一个类,把这个类当作基类,原来两个类对它进行继承。

组合:例如:

class A
{
public void f()
{
}
}
class B
{
private A a = new A();
public void f1()
{
a.f();
}
}

这样我们在类B中也可以使用类A中的f方法。

案例:

class A
{
public void f()
{
int sum = 0;
for (int i = 0; i < 100; i++)
{
sum += i;
}
}
public void fa()
{
}
}
class B
{
public void f()
{
int sum = 0;
for (int i = 0; i < 100; i++)
{
sum += i;
}
}
public void fb()
{
}
}

我们要在里面解决代码重复的问题:

首先说说组合:

首先,我们可能会想到在类B中创建一个类A,也就是说:

class A
{
public void f()
{
int sum = 0;
for (int i = 0; i < 100; i++)
{
sum += i;
}
}
public void fa()
{
}
}
class B
{
A a = new A();
public void f()
{
a.f();
}
public void fb()
{
}
}

这个方法确实可行,也就是采用了组合的方法,但是,我们会发现,它使得类B中不仅能够调用类A中的f()方法;也能调用类A中的fa()方法,这是我们所不允许的。所以,我们可以采用以下方式:

class C
{
public void f()
{
int sum = 0;
for (int i = 0; i < 100; i++)
{
sum += i;
}
}
}
class A
{
private C c = new C();
public void f()
{
c.f();
}
public void fa()
{
}
}
class B
{
private C c = new C();
public void f()
{
c.f();
}
public void fb()
{
}
}

也就是说直接把重复代码弄成一个新的类,然后引用这个类。这是采用了组合的方法。

下面来讲一下继承的方法来解决重复代码:

class C
{
public void f()
{
int sum = 0;
for (int i = 0; i < 100; i++)
{
sum += i;
}
}
}
class A:C
{
private C c = new C();
public void f()
{
c.f();
}

public void fa()
{

}
}
class B:C
{
private C c = new C();
public void f()
{
c.f();
}
public void fb()
{
}
}

三、泛型

解决仅仅因为数据类型不同而造成的代码重复。比如:定义一个list链表,可以是double类型的,也可以是int类型的,操作都一样,那么我们可以定义一个object类型

四、类库

动态链接库。两个项目之间出现了很多相同的类,可以把这些类封装在一起,做成一个动态链接库(类库)。例如:TIM,QQ之间的很多功能相同,他们之间使用到了类库 。

五、母版页和内容页

这个是用在C#的页面设计阶段,将母版页和内容页的内容相组合的方式来解决代码重复的问题。例如我们在一个博客网站的看别人的博客,只有博文的这一块版面是变化的,我们把它作为内容页,其余部分

可以当作母版页不变,这些内容页都连接到这一个母版页上,就可以做到不必要求当前博主的每一篇博文都重复编写母版页的那部分内容,直接上传博文就可以了。

标签: none

添加新评论