/
Decorator.cs
73 lines (60 loc) · 1.69 KB
/
Decorator.cs
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
using System;
using Test1.DesignPattern.GoF.Decorator;
// Decorator パターン
// ある核となるオブジェクトに対し、動的に機能を追加する
//
// 初期段階でクラスに機能を付けすぎず、後から必要な時に追加するということが可能になる
//
// Decoratorは機能の追加、
// Proxyは代理で処理をすることでの負荷の軽減 にそれぞれ重点を置く
namespace Test1.DesignPattern.GoF.Decorator
{
interface IKappa
{
void Work();
}
class OriginalKappa : IKappa
{
public OriginalKappa()
{
Console.WriteLine("古い河童がやってきました。");
}
public void Work() => Console.WriteLine("ダム建設疲れました…");
}
abstract class DecoratorKappa : IKappa
{
protected IKappa kappa;
public DecoratorKappa(IKappa kappa)
{
this.kappa = kappa;
}
public abstract void Work();
}
class NewKappa : DecoratorKappa
{
public NewKappa(IKappa kappa) : base(kappa)
{
Console.WriteLine("若い河童がやってきました");
}
public override void Work()
{
kappa.Work();
Console.WriteLine("尻子玉でも食べて休憩しよ");
}
}
}
namespace Test1.DesignPattern.Tester
{
static class Decorator
{
public static void Test()
{
Console.WriteLine("### Decorator");
var oldKappa = new OriginalKappa();
oldKappa.Work();
Console.WriteLine();
var newKappa = new NewKappa(oldKappa);
newKappa.Work();
}
}
}