C#设计模式(1)

转载 2006年06月10日 15:44:00

这学期开设设计模式课程,将课件放上来。



课本:《C#设计模式》,电子工业出版社,ISBN 7-5053-8979-3。33元含光盘。

 

课程内容:设计模式

来源:亚历山大的建筑模式、Gamma等人(1995)创作的"Design Patterns: Elements of Reusable Software"。这本书通常被称作"Gang of Four"或"GoF",开创性的创造了《设计模式》。

也有人说"三十六计"就是"模式"。


一、 C# 面向对象程序设计复习

  点击http://www.cnblogs.com/Files/zhenyulu/CSharp.rar下载,内容包括:

  字段与属性.cs
  属性、方法作用范围.cs
  一加到一百.cs
  使用接口排序(2).cs
  使用接口排序(1).cs
  求质数.cs
  冒泡法排序.cs
  九九表.cs
  静态与非静态.cs
  构造函数.cs
  方法重载.cs
  多态性.cs
  递归求阶乘.cs
  打印三角形.cs
  传值调用与引用调用.cs

 

二、 设计模式举例

在设计模式中有一种模式叫Builder模式,其原理如下:

我们可以将Builder理解成电饭锅,给这个Builder放进去米和水,经过Builder的Build后,我们就可以取出香喷喷的米饭了。
C#中有一个类叫StringBuilder,输入必要的信息后,就可以取出对应的String。其使用方法如下:

 

using System;
using System.Text;

class Exam
{
 
public static void Main()
 
{
  StringBuilder sb 
= new StringBuilder();
  sb.Append(
'a',2);
  sb.Append(
'b',3);
  sb.Append(
'c',4);
  Console.WriteLine(sb.ToString()); 
//打印出 aabbbcccc
  sb.Remove(0, sb.Length); //清除sb中的所有信息
 }

}

程序执行结果为: aabbbcccc
请使用StringBuilder对以下打印三角型的程序进行改写,写出新程序。

 

using System;
public class Exam
{
 
public static void Main()
 
{
  Console.Write(
"请输入行数:");
  
int lines = int.Parse(Console.ReadLine());
  Console.WriteLine(
"");
  
for(int i=1; i<=lines ; i++)
  
{
   
for(int k=1; k<= lines-i; k++)
    Console.Write(
" ");
   
for(int j=1; j<=i*2-1; j++)
    Console.Write(
"*");
   Console.WriteLine(
"");
  }

}

}

答:

using System;
using System.Text;
class Exam
{
 
public static void Main()
 
{
  Console.Write(
"请输入行数:");
  
int lines = int.Parse(Console.ReadLine());
  Console.WriteLine(
"");

  StringBuilder sb 
= new StringBuilder();

  
for(int i=1; i<=lines ; i++)
  
{
   sb.Append(
' ', lines-i);
   sb.Append(
'*', i*2-1);
   Console.WriteLine(sb.ToString());
   sb.Remove(
0, sb.Length);
  }

 }

}

 

三、 先有鸡还是先有蛋?

到底是先有鸡还是先有蛋?看下面的代码:

 

using System;

class Client
{
   
public static void Main ()
   
{
      Base b 
= new Base();
      Derived d 
= new Derived();
      b.d 
= d;
      Console.WriteLine(b.d.m);      
   }

}


class Base
{
   
public int n = 9;
   
public Derived d;
}


class Derived : Base
{
   
public int m = 10;   
}

Derived继承自Base,可以说没有Base就没有Derived,可Base里面有一个成员是Derived类型。到底是先有鸡还是先有蛋?这个程序可以正常编译执行并打印结果10。

 

四、 大瓶子套小瓶子还是小瓶子套大瓶子?

另外一个例子:

using System;

class Client
{
   
public static void Main ()
   
{
      A a 
= new A();
      B b 
= new B();
      a.b 
= b;
      b.a 
= a;
   }

}


class A
{
   
public B b;
}


class B
{
   
public A a; 
}

上面的代码似乎描述了"a包含b,b包含a"的关系,到底是大瓶子套小瓶子还是小瓶子套大瓶子呢?

 

五、 .net本质

关于"先有鸡还是先有蛋"的程序,系统运行后,内存结构如下:
 

由图中可以看出,根本不存在鸡与蛋的问题,而是型与值的问题以及指针引用的问题。

关于"大瓶子套小瓶子还是小瓶子套大瓶子"问题,系统运行后,内存结构如下:


 
由于是指针引用,所以也无所谓大瓶子还是小瓶子了。

关于更多内容可以参考《.NET本质论 第1卷:公共语言运行库》。

 



参考文献:
阎宏,《Java与模式》,电子工业出版社
[美]James W. Cooper,《C#设计模式》,电子工业出版社
[美]Alan Shalloway  James R. Trott,《Design Patterns Explained》,中国电力出版社
[美]Robert C. Martin,《敏捷软件开发-原则、模式与实践》,清华大学出版社
[美]Don Box, Chris Sells,《.NET本质论 第1卷:公共语言运行库》,中国电力出版社
http://www.dofactory.com/Patterns/Patterns.aspx 

 

 

C#面向对象设计模式纵横谈1

面向对象设计模式描述里面向对象设计过程中、特定场景下、 类与相互通信的对象之间常见的组织关系。设计模式是通过不断的重构得来的。敏捷开发:源代码就是设计懂面向对象设计模式的前提:懂面向对象面向对象的三...
  • shendejun
  • shendejun
  • 2015年06月08日 17:11
  • 369

c#设计模式-总结(针对GOF23)

比较   设计模式 常用程度 适用层次 引入时机 结构复杂度 Abstract Factory 比较常用 应用级 设计时 比较复杂 Builde...
  • q317379184
  • q317379184
  • 2015年08月18日 16:24
  • 484

C#常用三种设计模式

 一、单件模式动机(Motivation):    在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性、以及良好的效率。    如何绕过常规的构造器,提...
  • malimalihun
  • malimalihun
  • 2011年01月02日 18:47
  • 2083

C#项目中常用到的设计模式

1.引言 一个项目的通常都是从Demo开始,不断为项目添加新的功能以及重构,也许刚开始的时候代码显得非常凌乱,毫无设计可言。但是随着项目的迭代,往往需要将很多相同功能的代码抽取出来,...
  • orichisonic
  • orichisonic
  • 2016年06月23日 09:57
  • 457

C#设计模式(1)——单例模式(讲解非常清楚)

一、引言 最近在学设计模式的一些内容,主要的参考书籍是《Head First 设计模式》,同时在学习过程中也查看了很多博客园中关于设计模式的一些文章的,在这里记录下我的一些学习笔记,一是为了...
  • u013472838
  • u013472838
  • 2015年04月02日 15:01
  • 706

c#版本23个设计模式

最近把设计模式完整看了一遍~ 看完感觉,要再多看即便,并且写代码的时候要想着能不能用设计模式~ 转载自:http://www.cnblogs.com/zhili/p/Desig...
  • z9895512
  • z9895512
  • 2016年03月30日 09:54
  • 590

深入浅出设计模式(C#/Java版)

深入浅出设计模式(C#/Java版)作者:莫勇腾丛书名:出版社:清华大学出版社ISBN:9787302135647出版日期:2006年09月开本:异16页码:336版次:1-1内容简介本书是一本通俗易...
  • shandongqingdao
  • shandongqingdao
  • 2008年03月23日 21:13
  • 1566

C# 判断是否处于设计模式中(IsDesignMode)

自定义控件时提供IsDesignMode属性是很强力的。
  • Yokeqi
  • Yokeqi
  • 2014年12月11日 10:21
  • 2775

[C#]23种设计模式

创建型模式 工厂方法(Factory Method) 在工厂方法模式中,工厂方法用来创建客户所需要的产品,同时还向客户隐藏了哪种具体产品类将被实例化这一细节。工厂方法模式的核心是一个抽象工厂类...
  • s10141303
  • s10141303
  • 2013年12月06日 09:11
  • 2170

设计模式系列:仓储模式

仓储模式的实现 仓储Repository模式已经成为最主流的模式,数据库持久化很长时间以来是一个讨论热点,目前主要问题是:主流软件并不容易有效地将需要存储的数据映射到外部存储空间如关系数据库或NoS...
  • moon66sun
  • moon66sun
  • 2012年10月15日 16:21
  • 3710
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#设计模式(1)
举报原因:
原因补充:

(最多只允许输入30个字)