设计模式—命令模式

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

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

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

namespace ConsoleApplication1
{
abstract class Builder
{
public abstract void SetPrice();
public abstract void SetName();
}

class TVBuilder : Builder
{
private RawMateria rm;

public TVBuilder()
{
rm = new RawMateria();
}

public override void SetPrice()
{
rm.Price = "1500";
}

public override void SetName()
{
rm.Name = "TV";
}

public RawMateria GetTV()
{
return rm;
}
}

class PCBuilder : Builder
{
private RawMateria rm;

public PCBuilder()
{
rm = new RawMateria();
}

public override void SetName()
{
rm.Name = "PC";
}

public override void SetPrice()
{
rm.Price = "2000";
}

public RawMateria GetPC()
{
return rm;
}
}

class RawMateria
{
String _name;
String _price;

public String Name
{
get { return _name; }
set { _name = value; }
}

public String Price
{
get { return _price; }
set { _price = value; }
}

public void Show()
{
Console.WriteLine(this.Name + "    " \ + this.Price );
}
}

class Director
{
private PCBuilder pcbuilder = new PCBuilder();
private TVBuilder tvbuilder = new TVBuilder();

public RawMateria GiveMeTV()
{
tvbuilder.SetName();
tvbuilder.SetPrice();
return tvbuilder.GetTV();
}

public RawMateria GiveMePC()
{
pcbuilder.SetName();
pcbuilder.SetPrice();
return pcbuilder.GetPC();
}
}

class Client
{
public static void Main()
{
Director d = new Director();
d.GiveMePC().Show();
d.GiveMeTV().Show();
Console.Read();
}
}
}

设计模式---建造者(Builder)模式,有关系图

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

namespace ConsoleApplication1
{
class Facade
{
private Func1 field1;
private Func2 field2;

public Facade()
{
field1 = new Func1();
field2 = new Func2();
}

public void Method()
{
field1.Method();
field1.Method1();
field2.Method();
}

public void Method1()
{
field2.Method();
field2.Method1();
field1.Method();
}
}

class Func1
{
public void Method()
{
Console.WriteLine("功能类1的方法1");
}

public void Method1()
{
Console.WriteLine("功能类1的方法2");
}
}

internal class Func2
{
public void Method()
{
Console.WriteLine("功能类2的方法1");
}

public void Method1()
{
Console.WriteLine("功能类2的方法2");
}
}

class Client
{
public static void Main()
{
Facade f = new Facade();
f.Method();
f.Method1();
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
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
public class TheFather
{
public void BaseMethod1()
{
Console.WriteLine("吃了吗?");
BaseMethod2();
}

public virtual void BaseMethod2()
{
}
}

public class Son1 : TheFather
{
public override void BaseMethod2()
{
Console.WriteLine("吃了");
}
}

public class Son2 : TheFather
{
public override void BaseMethod2()
{
Console.WriteLine("还没呢");
}
}

public class Client
{
public static void Main()
{
TheFather obj = new Son1();
obj.BaseMethod1();

obj = new Son2();
obj.BaseMethod1();

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

namespace ConsoleApplication1
{
public class Simple : ICloneable
{
private int field1;
private int field2;

public int Property1
{
get { return field1; }
set { field1 = value; }
}

public int Property2
{
get { return field2; }
set { field2 = value; }
}

public object Clone()
{
return this.MemberwiseClone();
}
}

public class Complecated : ICloneable
{
private Simple simple;

public Complecated()
{
simple = new Simple();
}

private Complecated(Simple s)
{
simple = (Simple) s.Clone();
}

public object Clone()
{
Complecated c = new Complecated(simple);
return c;
}

public void SetMe(int a, int b)
{
simple.Property1 = a;
simple.Property2 = b;
}

public void Show()
{
Console.WriteLine(simple.Property1);
Console.WriteLine(simple.Property2);
}
}

public class Client
{
public static void Main()
{
Complecated c = new Complecated();
c.SetMe(1, 2);
Complecated c2 = (Complecated) c.Clone();


c2.SetMe(3, 4);

c.Show();
c2.Show();

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

namespace ConsoleApplication1
{
class Client
{
public static void Main()
{
IFactory i = new AddFactory();
Math oper = i.CreateOperation();
oper.A = 5;
oper.B = 10;
Console.WriteLine(oper.DoTheMath());

i = new SubFactory();
oper = i.CreateOperation();
oper.A = 10;
oper.B = 3;
Console.WriteLine(oper.DoTheMath());

Console.Read();
}
}

class Math
{
double _a;
double _b;

public double A
{
set { _a = value; }
get { return _a; }
}

public double B
{
set { _b = value; }
get { return _b; }
}

public virtual double DoTheMath()
{
return 0;
}
}

class Add : Math
{
public override double DoTheMath()
{
return A + B;
}
}

class Sub : Math
{
public override double DoTheMath()
{
return A - B;
}
}

interface IFactory
{
Math CreateOperation();
}

class AddFactory : IFactory
{
public Math CreateOperation()
{
return new Add();
}
}

class SubFactory : IFactory
{
public Math CreateOperation()
{
return new Sub();
}
}
}

关系图

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

namespace ConsoleApplication1
{
class Class1
{
public static void Main()
{
Proxy p = new Proxy();
p.DoYourStuff();
Console.Read();
}
}

abstract class ProxyBase
{
public abstract void DoYourStuff();
}

class Subject : ProxyBase
{
public override void DoYourStuff()
{
Console.WriteLine("do my job");
}
}

class Proxy : ProxyBase
{
Subject s;

public override void DoYourStuff()
{
if (s == null)
{
s = new Subject();
}

s.DoYourStuff();
//throw new NotImplementedException();
}
}
}

ok

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

namespace ConsoleApplication1
{
class Class1
{
public static void Main()
{
Person p = new Person("张三");

Ring r = new Ring();
EarRing er = new EarRing();
NeckLace nl = new NeckLace();

r.Decrate(p);
er.Decrate(r);
nl.Decrate(er);
nl.Show();
Console.Read();
}
}

class Person
{
string name;

public Person(string name)
{
this.name = name;
}

public Person()
{
} //重载一个没有参数的构造函数,给其他子类用

public virtual void Show()
{
Console.WriteLine("{0}拥有以上装饰物品", name);
}
}

class Decrator : Person
{
Person p;

public override void Show()
{
p.Show();
}

public void Decrate(Person p)
{
this.p = p;
}
}

class Ring : Decrator
{
public override void Show()
{
Console.WriteLine("戒指");
base.Show();
}
}

class EarRing : Decrator
{
public override void Show()
{
Console.WriteLine("耳环");
base.Show();
}
}

class NeckLace : Decrator
{
public override void Show()
{
Console.WriteLine("项链");
base.Show();
}
}
}

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

namespace ConsoleApplication1
{
abstract class OperSuper
{
public abstract double GetResult(double a, double b);
}

class Add : OperSuper
{
public override double GetResult(double a, double b)
{
return a + b;
}
}

class Minus : OperSuper
{
public override double GetResult(double a, double b)
{
return a - b;
}
}

class Context
{
OperSuper os = null;
double A, B;

public Context(OperSuper o, double a, double b)
{
os = o;
A = a;
B = b;
}

public double GetResult()
{
return os.GetResult(A, B);
}
}

class client
{
public static void Main()
{
Context c = new Context(new Add(), 10, 20);
Console.WriteLine(c.GetResult());
c = new Context(new Minus(), 20, 10);
Console.WriteLine(c.GetResult());
}
}
}

简单工厂的最最简单应用

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

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Calculate cal = factory.CreateOper("-");
cal.A = 10;
cal.B = 20;
Console.WriteLine(cal.GetResult());

cal = factory.CreateOper("+");
cal.A = 10;
cal.B = 20;
Console.WriteLine(cal.GetResult());
}
}

abstract class Calculate
{
double _NumA = 0;
double _B = 0;

public double A

{
get { return _NumA; }
set { _NumA = value; }
}

public double B

{
get { return _B; }
set { _B = value; }
}

public abstract double GetResult();
}

class Add : Calculate
{
public override double GetResult()
{
return A + B;
}
}

class Minus : Calculate
{
public override double GetResult()
{
return A - B;
}
}

class factory
{
public static Calculate
CreateOper(string oper)
{
Calculate op = null;
switch (oper)
{
case "+":

op = new Add();
break;

case "-":

op = new Minus();
break;
}

return op;
}
}
}

《编程之美——微软技术面试心得》“中国象棋的将帅问题”C#实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Class1 {

static byte counter = 81;

static void Main(string[] a) {
while (counter-- != 0) {
if (counter / 9 % 3 == counter % 9 % 3)
continue;
else {
System.Console.WriteLine("a=" + (counter / 9 + 1).ToString() + "b=" + (counter % 9 + 1).ToString());
}
}

System.Console.Read();
}

}

适用于1.8GHZ左右的CPU 50%占用率

1
2
3
4
5
6
7
8
9
10
11
12
13
14

class ManageCpu {
staticvoid Main(string[] a) {
int st = 0;
while (true) {
st = System.Environment.TickCount;

while (System.Environment.TickCount - st < 90) {
}

System.Threading.Thread.Sleep(90);
}
}
}