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依然没有恢复迹象……)

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();
}
}
}

设计模式—备忘录模式(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();
        }
    }
}
``

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();
}
}
}

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

namespace ConsoleApplication1
{
internal interface SportMan
{
void Come();
}

class ChineseSportMan : SportMan
{
public void Come()
{
Console.WriteLine("中国运动员来了~~~");
}
}

class RussianSportMan : SportMan
{
public void Come()
{
Console.WriteLine("俄罗斯运动员来了~~~");
}
}

class TheController
{
public static SportMan CreateSportMan()
{
//string s = (string)ConfigurationSettings.AppSettings["Nation"];
return (SportMan) Assembly.Load("ConsoleApplication1")
.CreateInstance("ConsoleApplication1." + ConfigurationSettings.AppSettings["Nation"].ToString());
//ConfigurationSettings.AppSettings[];
//return new ChineseSportMan();
}
}

class Client
{
public static void Main()
{
TheController.CreateSportMan().Come();
//s.Come();
//SportMan  c=(SportMan)Assembly.Load("ConsoleApplication1").CreateInstance("ConsoleApplication1.ChineseSportMan");
//c.Come();
}
}
}

设计模式---抽象工厂模式+反射+配置文件

设计模式---观察者模式(恐怖袭击、地震的例子,有类关系图)

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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
internal interface Warning
{
String Situation { get; set; }
void Warn();
void Add(PeopleInSchool p);
void Sub(PeopleInSchool p);
}

class PoliceStation : Warning
{
private IList<PeopleInSchool> field = new List<PeopleInSchool>();
string situation;

public string Situation
{
get { return situation; }
set { situation = value; }
}

public void Warn()
{
foreach (PeopleInSchool p in field)
{
p.WarningReceived();
}
}

public void Add(PeopleInSchool p)
{
field.Add(p);
}

public void Sub(PeopleInSchool p)
{
field.Remove(p);
}
}

class EarthquakeDepartment : Warning
{
string situation;
private IList<PeopleInSchool> field = new List<PeopleInSchool>();

public string Situation
{
get { return situation; }
set { situation = value; }
}

public void Warn()
{
foreach (PeopleInSchool p in field)
{
p.WarningReceived();
}
}

public void Add(PeopleInSchool p)
{
field.Add(p);
}

public void Sub(PeopleInSchool p)
{
field.Remove(p);
}
}

abstract class PeopleInSchool
{
protected Warning field;

public PeopleInSchool(Warning w)
{
field = w;
}

public abstract void WarningReceived();
}

class Teacher : PeopleInSchool
{
public Teacher(Warning w)
: base(w)
{
}

public override void WarningReceived()
{
Console.WriteLine("我是老师" + field.Situation);
}
}

class Student : PeopleInSchool
{
public Student(Warning w)
: base(w)
{
}

public override void WarningReceived()
{
Console.WriteLine("我是学生" + field.Situation);
}
}

class Client
{
public static void Main()
{
PoliceStation p = new PoliceStation();
Teacher t = new Teacher(p);
Student s = new Student(p);
p.Add(t);
p.Add(s);
p.Situation = "有恐怖袭击!!!";
p.Warn();
p.Situation = "注意防火防盗!!!";
p.Warn();
EarthquakeDepartment e = new EarthquakeDepartment();
t = new Teacher(e);
s = new Student(e);
e.Add(t);
e.Add(s);
e.Situation = "要地震了!!!";
e.Warn();
Console.Read();
}
}
}