前言:
在很多种情况下,处理某个请求的对象不止一个,当某个请求发起时,第一个对象可能可以处理,也可能无法处理,这时候就要让其他的对象来处理,所以当前对象里面必须要维持对其他对象的引用,这样一层一层的传递下去,就成了一条对象链,每个对象中都维持了对另一个对象的引用,看代码:
1、抽象类
除了提供一个传入Int类型变量的方法外,还提供了一个传入另一个对象的方法
abstract class Abstraction
{
public Abstraction _Abstraction;
public void SetAbstraction(Abstraction abstraction)
{
this._Abstraction = abstraction;
}
public abstract void Operation(int number);
}
2、具体类
实现抽象类中的方法,并且当当前对象处理不了请求时,调用当前类中存储的另一个对象来处理
class ConcreteSmall : Abstraction
{
public override void Operation(int number)
{
if(number <10)
{
Console.WriteLine($"small:{number }");
}
else
{
this._Abstraction.Operation(number);
}
}
}
class ConcreteMiddle : Abstraction
{
public override void Operation(int number)
{
if (number < 50)
{
Console.WriteLine($"middle:{number }");
}
else
{
this._Abstraction.Operation(number);
}
}
}
class ConcreteBig : Abstraction
{
public override void Operation(int number)
{
Console.WriteLine($"big:{number }");
}
}
3、调用:
第一步、实例化所有对象
第二步、将下一层的对象传入到当前对象所在的类中
第三层、调用顶层对象的方法。
Abstraction small = new ConcreteSmall();
Abstraction middle = new ConcreteMiddle ();
Abstraction big = new ConcreteBig();
small.SetAbstraction(middle);
middle.SetAbstraction(big);
int number = 60;
small.Operation(number );