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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
delegate long DoMath(long num);

static void Main(string[] args)
{
Program p = new Program();
p.GetFactorial(26);
DoMath d = new DoMath(p.HowManyZero);
d += p.HowManyZero2;
d(26);
Console.Read();
}

public long HowManyZero(long num) //第一种解法
{
long result = 0;
for (long i = 1; i <= num; i++)
{
long j = i;
while (j % 5 == 0)
{
result++; //检查每一个数可以分解因式出多少个5
j /= 5;
}
}

Console.WriteLine(result);
return result;
}

public long HowManyZero2(long num) //第二种
{
long ret = 0;
while (num != 0)
{
ret += num / 5; //可以被5整除,然后是25、125、625......
num /= 5;
}

Console.WriteLine(ret);
return ret;
}

public decimal GetFactorial(long num) //获得阶乘
{
decimal ret = 1;
for (long i = 1; i <= num; i++)
{
ret *= i;
}

Console.WriteLine(ret);
return ret;
}
}
}

书上只标了2颗星,我怎么觉得这么费劲….
PS:decimal都算不到30的阶乘啊……

具体讲解书上有

顺便复习一下delegate~

编程之美—1的个数C#笨(效率低)的方法实现

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
class Program
{
static void Main(string[] args)
{
Program p = new Program();
Console.WriteLine(p.count_1_in_a_bounch_of_nums(13));
Console.Read();
}

public int count_1_in_a_num(int num)
{
int count = 0;
while (num != 0)
{
count += (num % 10) == 1 ? 1 : 0;
num /= 10;
}

return count;
}

public int count_1_in_a_bounch_of_nums(int end)
{
int count = 0;
for (int i = 1; i <= end; i++)
{
count += count_1_in_a_num(i);
}

return count;
}
}

internal值根据配置调整

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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
const double SPLIT = 0.01;
const int COUNT = 200;
const double PI = 3.14159265;
const int INTERVAL = 100;
double[] busySpan = new double [COUNT]; //array of busy times
double[] idleSpan = new double [COUNT]; //array of idle times
int half = INTERVAL / 2;
double radian = 0.0;
for (int i = 0; i < COUNT; i++)
{
busySpan[i] = (double) (half + (Math.Sin(PI * radian) * half));
idleSpan[i] = INTERVAL - busySpan[i];
radian += SPLIT;
}

double startTime = 0;
int j = 0;
while (true)
{
j = j % COUNT;
startTime = Environment.TickCount;
while ((Environment.TickCount - startTime) <= busySpan[j]) ;
System.Threading.Thread.Sleep((int) idleSpan[j]);
j++;
}
}
}
}

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
class Program
{
static void Main(string[] args)
{
int[] person = {0, 1, 1, 1, 1, 1, 15}; //总共六层楼,没有0层
int needed = 0;
int min = 0;
int target = 0;
for (int i = 1; i <= 6; i++)
{
needed = 0;
for (int j = 1; j < i; j++)
{
//目的在i层以下的
needed += person[j] * (i - j);
}

for (int j = i + 1; j <= 6; j++)
{
//目的在i层上面的
needed += person[j] * (j - i);
}

if (min == 0 || min >= needed)
{
min = needed;
target = i;
}
}

Console.WriteLine(target);
Console.Read();
}

用new修饰的方法,在编译期按变量类型调用

所以:

Number number = new IntNumber();
number.ShowInfo();

会显示”base class—“

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
class Number
{
public static int i = 123;

public virtual void ShowInfo()
{
Console.WriteLine("base class---");
}

public virtual void ShowNumber()
{
Console.WriteLine(i.ToString());
}
}

class IntNumber : Number
{
new public static int i = 456;

public new virtual void ShowInfo()
{
Console.WriteLine("Derived class---");
}

public override void ShowNumber()
{
Console.WriteLine("Base number is {0}", Number.i.ToString());
Console.WriteLine("New number is {0}", i.ToString());
}
}

class Test_Number
{
public static void Main() //Main_6_1_1
{
Number num = new Number();
num.ShowNumber();
IntNumber intNum = new IntNumber();
intNum.ShowNumber();
intNum.ShowInfo();
Number number = new IntNumber();
//究竟调用了谁?
number.ShowInfo();
//究竟调用了谁?
number.ShowNumber();
Console.Read();
}
}

C# Code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public static void Main3_3_3()
{
int x = 10;

int y = 6;
if (x > y)
{
Console.WriteLine(x);
}
else
{
Console.WriteLine(y);
}

Console.Read();
}

对应MSIL及其注释:

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
.method  public  hidebysig  static  void  Main3_3_3() cil managed 
{
.maxstack 2
.locals init (
[0] int32 x,
[1] int32 y,
[2] bool CS$4$0000) //定义三个变量
L_0000: nop
L_0001: ldc.i4.s 10 //把整型值10载入堆栈
L_0003: stloc.0 //把刚才载入堆栈的10赋值给第一个local变量,也就是int x=10;
L_0004: ldc.i4.6 //把整型值6载入堆栈
L_0005: stloc.1 //把刚才载入堆栈的6赋值给第二个local变量,也就是int y=6;
L_0006: ldloc.0
L_0007: ldloc.1 //这两句,把x,y两个local变量载入堆栈
L_0008: cgt //比较x,y的大小,结果会保存在堆栈最上方(结果以0或1表示true ,false)
L_000a: ldc.i4.0 //把0载入堆栈
L_000b: ceq //比较0和cgt的运算结果是否相等,结果会保存在堆栈最上方(结果以0或1表示true ,false)
L_000d: stloc.2 //ceq的运算结果保存入bool变量中
L_000e: ldloc.2 //再把ceq运算结果载入
L_000f: brtrue.s L_001a //判断跳转,若跳转显式Y,不跳转显式X
L_0011: ldloc.0
L_0012: callvoid [mscorlib]System.Console::WriteLine(int32)
L_0017: nop
L_0018: br.s L_0021
L_001a: ldloc.1
L_001b: callvoid [mscorlib]System.Console::WriteLine(int32)
L_0020: nop
L_0021: call int32 [mscorlib]System.Console::Read()
L_0026: pop
L_0027: ret
}

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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
abstract class Element
{
public abstract void Accept(Visitor v);
}

class Elem1 : Element
{
public override void Accept(Visitor v)
{
v.VisitElem1(this);
}
}

class Elem2 : Element
{
public override void Accept(Visitor v)
{
v.VisitElem2(this);
}
}

abstract class Visitor
{
public abstract void VisitElem1(Elem1 e1);
public abstract void VisitElem2(Elem2 e2);
}

class Visitor1 : Visitor
{
public override void VisitElem1(Elem1 e1)
{
Console.WriteLine(this.GetType().Name + "  " + e1.GetType().Name);
}

public override void VisitElem2(Elem2 e2)
{
Console.WriteLine(this.GetType().Name + "  " + e2.GetType().Name);
}
}

class Visitor2 : Visitor
{
public override void VisitElem1(Elem1 e1)
{
Console.WriteLine(this.GetType().Name + "  " + e1.GetType().Name);
}

public override void VisitElem2(Elem2 e2)
{
Console.WriteLine(this.GetType().Name + "  " + e2.GetType().Name);
}
}

class ObjStructure
{
private List<Element> elems = new List<Element>();

public void add(Element e)
{
elems.Add(e);
}

public void visit(Visitor v)
{
foreach (Element e in elems)
{
e.Accept(v);
}
}
}

class Client
{
public static void Main()
{
ObjStructure o = new ObjStructure();
o.add(new Elem1());
o.add(new Elem2());
o.visit(new Visitor1());
o.visit(new Visitor2());
Console.Read();
}
}
}

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
74
75
76
77
78
79
80
81
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
abstract class Expretion
{
public void Translate(Words w)
{
string s = w.MyWords.Substring(0, 1);
w.MyWords = w.MyWords.Substring(2);
Excute(s);
}

public abstract void Excute(string s);
}

class EnglishExpretion : Expretion
{
public override void Excute(string s)
{
switch (s)
{
case "e":
Console.WriteLine("对方说的英语");
break;
}
}
}

class GermanExpretion : Expretion
{
public override void Excute(string s)
{
switch (s)
{
case "g":
Console.WriteLine("对方说的德语");
break;
}
}
}

class Words
{
private string words;

public string MyWords
{
get { return words; }
set { words = value; }
}
}

class Client
{
public static void Main()
{
Words w = new Words();
w.MyWords = "e g e e g ";
Expretion e = null;
while (w.MyWords.Length > 0)
{
switch (w.MyWords.Substring(0, 1))
{
case "e":
e = new EnglishExpretion();
break;
case "g":
e = new GermanExpretion();
break;
}

e.Translate(w);
}

Console.Read();
}
}
}

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
74
75
76
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;

namespace ConsoleApplication1
{
class MovieTheater
{
private Hashtable movies = new Hashtable();

public void GiveMeAMovie(string name)
{
Movie m;
if (movies.ContainsKey(name))
{
m = (Movie) movies[name];
}
else
{
m = new ConcreteMovie(name);
movies.Add(name, m);
}

m.ShowTheMovie();
}

public void HowManyMoviesHaveWeOrdered()
{
Console.WriteLine(movies.Count);
}
}

abstract class Movie
{
protected string name;

public Movie(string n)
{
this.name = n;
}

public abstract void ShowTheMovie();
}

class ConcreteMovie : Movie
{
public ConcreteMovie(string n)
: base(n)
{
}

public override void ShowTheMovie()
{
Console.WriteLine(name);
}
}

class Client
{
public static void Main()
{
MovieTheater mth = new MovieTheater();
mth.GiveMeAMovie("Hell Boy");
mth.GiveMeAMovie("Wanted");
mth.GiveMeAMovie("Wall-E");
mth.GiveMeAMovie("Hell Boy");
mth.GiveMeAMovie("Hell Boy");
mth.GiveMeAMovie("Wanted");
mth.GiveMeAMovie("Wall-E");
mth.GiveMeAMovie("Hell Boy");
mth.HowManyMoviesHaveWeOrdered();
Console.Read();
}
}
}

设计模式---中介者模式(打出来是“终结者.......”)

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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
abstract class FBIAgent
{
public abstract void SendMessage(string m);

public void ReadMessage(string m)
{
Console.WriteLine(m);
}
}

class AgentInRussia : FBIAgent
{
private FBICenter center;

public AgentInRussia(FBICenter f)
{
center = f;
}

public override void SendMessage(string m)
{
center.Send(this, m);
}
}

class AgentInEngland : FBIAgent
{
private FBICenter center;

public override void SendMessage(string m)
{
center.Send(this, m);
}

public AgentInEngland(FBICenter f)
{
center = f;
}
}

abstract class FBICenter
{
public abstract void Send(FBIAgent f, string m);
}

class RealFBICenter : FBICenter
{
private FBIAgent agentinrussia;
private FBIAgent agentinengland;

public FBIAgent russia
{
set { agentinrussia = value; }
}

public FBIAgent england
{
set { agentinengland = value; }
}

public override void Send(FBIAgent f, string m)
{
if (f == agentinengland)
{
agentinrussia.ReadMessage(m);
}
else
{
agentinengland.ReadMessage(m);
}
}
}

class Client
{
public static void Main()
{
RealFBICenter fc = new RealFBICenter();
AgentInEngland eng = new AgentInEngland(fc);
AgentInRussia rus = new AgentInRussia(fc);
fc.england = eng;
fc.russia = rus;
eng.SendMessage("我在英国搞情报,hia~hia~");
rus.SendMessage("我在俄罗斯搞情报,xia~ixa~");
Console.Read();
}
}
}

设计模式—命令模式

d1fc651edbf349ec1ad5765a.jpg

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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
abstract class Order
{
protected General general;

public Order(General g)
{
this.general = g;
}

public abstract void Excute();
}

class Fire : Order
{
public Fire(General g)
: base(g)
{
}

public override void Excute()
{
general.ExcuteFire();
}
}

class Retreat : Order
{
public Retreat(General g)
: base(g)
{
}

public override void Excute()
{
general.ExcuteRetreat();
}
}

class Soldier
{
private String name;

public Soldier(string n)
{
this.name = n;
}

public void ExcuteFire()
{
Console.WriteLine(name + "开火");
}

public void ExcuteRetreat()
{
Console.WriteLine(name + "撤退");
}
}

class General
{
private Soldier soldier;

public void ExcuteFire()
{
soldier.ExcuteFire();
}

public void SetSoldier(Soldier s)
{
this.soldier = s;
}

public void ExcuteRetreat()
{
soldier.ExcuteRetreat();
}
}

class Client
{
public static void Main()
{
General g = new General();
Soldier s = new Soldier("张三");
g.SetSoldier(s);
Order o = new Fire(g);
o.Excute();
o = new Retreat(g);
o.Excute();
g.SetSoldier(new Soldier("李四"));
o.Excute();
Console.Read();
}
}
}

2008年08月17日 星期日 下午 04:28

0dceef368c252b290b55a959.jpg

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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
abstract class Officer
{
protected Officer myboss;

public Officer(Officer o)
{
myboss = o;
}

public abstract void Deal(Action a);
}

class PoliceMan : Officer
{
public PoliceMan(Officer o)
: base(o)
{
}

public override void Deal(Action a)
{
if (a == Action.逮捕罪犯)
{
Console.WriteLine("我是警察,我去逮捕罪犯");
}
else if (myboss != null)
{
myboss.Deal(a);
}
}
}

class FBI : Officer
{
public FBI(Officer o)
: base(o)
{
}

public override void Deal(Action a)
{
if (a == Action.暗杀)
{
Console.WriteLine("我是FBI,我去暗杀");
}
else if (myboss != null)
{
myboss.Deal(a);
}
}
}

class Precident : Officer
{
public Precident(Officer o)
: base(o)
{
}

public override void Deal(Action a)
{
if (a == Action.干掉萨达姆)
{
Console.WriteLine("我是总统,我去找人干掉萨达姆");
}
else if (myboss != null)
{
myboss.Deal(a);
}
}
}

enum Action
{
逮捕罪犯,
暗杀,
干掉萨达姆
}

class Client
{
public static void Main()
{
Officer police = new PoliceMan(new FBI(new Precident(null)));
police.Deal(Action.逮捕罪犯);
police.Deal(Action.暗杀);
police.Deal(Action.干掉萨达姆);
Console.Read();
}
}
}

2008年08月15日 星期五 下午 05:23

松耦合

09e79510c02a0e19203f2e7e.jpg

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
74
75
76
77
78
79
80
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
abstract class Vehicle
{
protected Engine e;

public abstract void Show();

public abstract void InstallEngine(Engine e);
}

class RacingCar : Vehicle
{
public override void Show()
{
Console.WriteLine("跑车");
e.Show();
}

public override void InstallEngine(Engine e)
{
this.e = e;
}
}

class Tractor : Vehicle
{
public override void Show()
{
Console.WriteLine("拖拉机");
e.Show();
}

public override void InstallEngine(Engine e)
{
this.e = e;
}
}

abstract class Engine
{
public abstract void Show();
}

class RacingCarEngine : Engine
{
public override void Show()
{
Console.WriteLine("跑车引擎");
}
}

class TractorEngine : Engine
{
public override void Show()
{
Console.WriteLine("拖拉机引擎");
}
}

class Client
{
public static void Main()
{
Vehicle v = new RacingCar();
v.InstallEngine(new RacingCarEngine());
v.Show();

v = new Tractor();
v.InstallEngine(new TractorEngine());
v.Show();

Console.Read();
}
}
}

设计模式—单例模式(singleton)

c56fe019dbd71a62dbb4bd42.jpg

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
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
class Singleton
{
private static Singleton s;

private Singleton()
{
}

public static Singleton GetInstance()
{
if (s == null)
{
s = new Singleton();
}

return s;
}
}

class Client
{
public static void Main()
{
Singleton s1 = Singleton.GetInstance();
Singleton s2 = Singleton.GetInstance();
if (object.ReferenceEquals(s1, s2))
{
Console.WriteLine("一样的");
Console.WriteLine(s1);
}

Console.Read();
}
}
}

设计模式—备忘录模式(CSDN没有恢复迹象……)

7f6bab1990e5495243a9ad1c.jpg

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
    class 人物状态
    {
        private int _血;
        private int _气;

        public 人物状态()
        {
            _气 = 100;
            _血 = 100;
        }

        public int 血
        {
            get { return _血; }
            set { _血 = value; }
        }

        public int 气
        {
            get { return _气; }
            set { _气 = value; }
        }

        public 存档 存档()
        {
            return new 存档(_血, _气);
        }

        public void 读档(存档 c)
        {
            this.气 = c.气;
            this.血 = c.血;
        }

        public void 战斗()
        {
            System.Random r = new System.Random();

            this._血 = r.Next(100);
            this._气 = r.Next(100);
        }

        public void ShowState()
        {
            Console.WriteLine(this.气 + " " + this.血);
        }
    }

    class 存档
    {
        private int _气;

        private int _血;

        public 存档(int x, int q)
        {
            this._气 = q;
            this._血 = x;
        }

        public int 气
        {
            get { return _气; }
        }

        public int 血
        {
            get { return _血; }
        }
    }

    class 管理器
    {
        private 存档 savedfile;

        public 存档 SavedFile
        {
            get { return savedfile; }
            set { savedfile = value; }
        }
    }

    class 调用者
    {
        public static void Main()
        {
            人物状态 r = new 人物状态();
            r.ShowState();

            管理器 g = new 管理器();
            g.SavedFile = r.存档();
            r.战斗();
            r.ShowState();
            r.读档(g.SavedFile);
            r.ShowState();
            Console.Read();
        }
    }
}
``

设计模式—组合模式(CSDN依然没有恢复迹象……)

7fef7ad965c15b3411df9b0d.jpg

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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
abstract class AbstractCompany
{
protected String Name;

public AbstractCompany(string name)
{
this.Name = name;
}

public abstract void Add(AbstractCompany c);

public abstract void Remove(AbstractCompany c);

public abstract void Show(int len);

public abstract void DoJob();
}

class RealCompany : AbstractCompany
{
private IList<AbstractCompany> Son = new List<AbstractCompany>();

public RealCompany(string name) : base(name)
{
}

public override void Add(AbstractCompany c)
{
Son.Add(c);
}

public override void DoJob()
{
Console.WriteLine(Name + "公司正常运转");
foreach (AbstractCompany a in Son)
{
a.DoJob();
}
}

public override void Remove(AbstractCompany c)
{
Son.Remove(c);
}

public override void Show(int len)
{
Console.WriteLine(new String('-', len) + Name);
foreach (AbstractCompany a in Son)
{
a.Show(len + 1);
}
}
}

class HR : AbstractCompany
{
public HR(string name) : base(name)
{
}

public override void Add(AbstractCompany c)
{
}

public override void DoJob()
{
Console.WriteLine(Name + "人事部正常运转");
}

public override void Remove(AbstractCompany c)
{
}

public override void Show(int len)
{
Console.WriteLine(new string('-', len) + Name);
}
}

class Client
{
public static void Main()
{
AbstractCompany root = new RealCompany("总公司");
root.Add(new HR("总公司人事部"));

RealCompany r = new RealCompany("分公司");
r.Add(new HR("分公司人事部"));

root.Add(r);

root.Show(1);
root.DoJob();

Console.Read();
}
}
}

53a941eefca8a5ecb3fb9578.jpg

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
74
75
76
77
78
79
80
81
82
83
84
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
abstract class Birds
{
public abstract void Fly();

public abstract void Shout();
}

class Duck : Birds
{
public override void Fly()
{
Console.WriteLine("鸭子飞");
}

public override void Shout()
{
Console.WriteLine("鸭子叫唤");
}
}

class Chick : Birds
{
public override void Fly()
{
Console.WriteLine("小鸡飞");
}

public override void Shout()
{
Console.WriteLine("小鸡飞");
}
}

class Adapter : Birds
{
private Eagle eagle = new Eagle();

public override void Fly()
{
eagle.Fly();
}

public override void Shout()
{
eagle.Shout();
}
}

class Eagle
{
public void Fly()
{
Console.WriteLine("老鹰飞");
}

public void Shout()
{
Console.WriteLine("老鹰叫唤");
}
}

class Client
{
public static void Main()
{
Birds b = new Duck();
b.Fly();
b.Shout();
b = new Chick();
b.Fly();
b.Shout();
b = new Adapter();
b.Fly();
b.Shout();
Console.Read();
}
}
}

设计模式—状态模式(今天CSDN竟然上不去,暂时发在这里)

58cbf8feaccd5d265d60085a.jpg

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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
abstract class State
{
public abstract void DoWhatIShouldDo(Worker w);
}

class Young : State
{
public override void DoWhatIShouldDo(Worker w)
{
if (w.Age <= 35)
{
Console.WriteLine("我年轻,逍遥自在");
}
else
{
w.State = new MiddleAge();
w.DoWhatIShouldDo();
}
}
}

class MiddleAge : State
{
public override void DoWhatIShouldDo(Worker w)
{
if (w.Age <= 50)
{
Console.WriteLine("人到中年");
}
else
{
w.State = new Old();
w.DoWhatIShouldDo();
}
}
}

class Old : State
{
public override void DoWhatIShouldDo(Worker w)
{
Console.WriteLine("老年生活");
}
}

class Worker
{
State state;
int age;

public Worker()
{
age = 1;
state = new Young();
}

public int Age
{
get { return age; }
set { age = value; }
}

public State State
{
get { return State; }
set { state = value; }
}

public void DoWhatIShouldDo()
{
state.DoWhatIShouldDo(this);
}
}

class Client
{
public static void Main()
{
Worker w = new Worker();
w.Age = 5;
w.DoWhatIShouldDo();
w.Age = 45;
w.DoWhatIShouldDo();
w.Age = 80;
w.DoWhatIShouldDo();
Console.Read();
}
}
}