设计模式(1)

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

  点击http://files.cnblogs.com/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。其使用方法如下:

None.gifusing System;
None.gif
using System.Text;
None.gif
None.gif
class Exam
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif 
public static void Main()
ExpandedSubBlockStart.gifContractedSubBlock.gif 
dot.gif{
InBlock.gif  StringBuilder sb 
= new StringBuilder();
InBlock.gif  sb.Append(
'a',2);
InBlock.gif  sb.Append(
'b',3);
InBlock.gif  sb.Append(
'c',4);
InBlock.gif  Console.WriteLine(sb.ToString()); 
//打印出 aabbbcccc
InBlock.gif
  sb.Remove(0, sb.Length); //清除sb中的所有信息
ExpandedSubBlockEnd.gif
 }

ExpandedBlockEnd.gif}

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

None.gifusing System;
None.gif
public class Exam
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif 
public static void Main()
ExpandedSubBlockStart.gifContractedSubBlock.gif 
dot.gif{
InBlock.gif  Console.Write(
"请输入行数:");
InBlock.gif  
int lines = int.Parse(Console.ReadLine());
InBlock.gif  Console.WriteLine(
"");
InBlock.gif  
for(int i=1; i<=lines ; i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif  
dot.gif{
InBlock.gif   
for(int k=1; k<= lines-i; k++)
InBlock.gif    Console.Write(
" ");
InBlock.gif   
for(int j=1; j<=i*2-1; j++)
InBlock.gif    Console.Write(
"*");
InBlock.gif   Console.WriteLine(
"");
ExpandedSubBlockEnd.gif  }

ExpandedSubBlockEnd.gif}

ExpandedBlockEnd.gif}

答:

None.gifusing System;
None.gif
using System.Text;
None.gif
class Exam
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif 
public static void Main()
ExpandedSubBlockStart.gifContractedSubBlock.gif 
dot.gif{
InBlock.gif  Console.Write(
"请输入行数:");
InBlock.gif  
int lines = int.Parse(Console.ReadLine());
InBlock.gif  Console.WriteLine(
"");
InBlock.gif
InBlock.gif  StringBuilder sb 
= new StringBuilder();
InBlock.gif
InBlock.gif  
for(int i=1; i<=lines ; i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif  
dot.gif{
InBlock.gif   sb.Append(
' ', lines-i);
InBlock.gif   sb.Append(
'*', i*2-1);
InBlock.gif   Console.WriteLine(sb.ToString());
InBlock.gif   sb.Remove(
0, sb.Length);
ExpandedSubBlockEnd.gif  }

ExpandedSubBlockEnd.gif }

ExpandedBlockEnd.gif}

 

三、 先有鸡还是先有蛋?

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

None.gifusing System;
None.gif
None.gif
class Client
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif   
public static void Main ()
ExpandedSubBlockStart.gifContractedSubBlock.gif   
dot.gif{
InBlock.gif      Base b 
= new Base();
InBlock.gif      Derived d 
= new Derived();
InBlock.gif      b.d 
= d;
InBlock.gif      Console.WriteLine(b.d.m);      
ExpandedSubBlockEnd.gif   }

ExpandedBlockEnd.gif}

None.gif
None.gif
class Base
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif   
public int n = 9;
InBlock.gif   
public Derived d;
ExpandedBlockEnd.gif}

None.gif
None.gif
class Derived : Base
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif   
public int m = 10;   
ExpandedBlockEnd.gif}

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

 

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

另外一个例子:

None.gifusing System;
None.gif
None.gif
class Client
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif   
public static void Main ()
ExpandedSubBlockStart.gifContractedSubBlock.gif   
dot.gif{
InBlock.gif      A a 
= new A();
InBlock.gif      B b 
= new B();
InBlock.gif      a.b 
= b;
InBlock.gif      b.a 
= a;
ExpandedSubBlockEnd.gif   }

ExpandedBlockEnd.gif}

None.gif
None.gif
class A
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif   
public B b;
ExpandedBlockEnd.gif}

None.gif
None.gif
class B
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif   
public A a; 
ExpandedBlockEnd.gif}

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

 

五、 .net本质

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

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

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

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

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



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

转载于:https://www.cnblogs.com/zhouxiancai0128/archive/2006/10/20/534765.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/300848.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微软面向初学者的机器学习课程:1.3-机器学习中的公平性

写在前面&#xff1a;最近在参与microsoft/ML-For-Beginners的翻译活动&#xff0c;欢迎有兴趣的朋友加入&#xff08;https://github.com/microsoft/ML-For-Beginners/issues/71&#xff09;机器学习中的公平性作者Tomomi Imura课前测验介绍在本课程中&#xff0c;您将开始了解…

[每日一题] 11gOCP 1z0-052 :2013-09-23 Oracle11g 内存参数设置...................................C7...

转载请注明出处&#xff1a;http://blog.csdn.net/guoyjoe/article/details/11924597正确答案&#xff1a;CD&#xff08;题库给出的答案是AD&#xff0c;大家要相信自己&#xff0c;有些答案是错的&#xff01;一切以实战为依据&#xff09;一、我们先来看Oracle 11g内存架构图…

童年各大名场面~ | 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅&#xff08;图源网络&#xff0c;侵权删&#xff09;随便一截就是表情包↓ ↓ ↓

android mvvm流程图,MVVM框架模式详解

MVVM 定义MVVM 是 Model-View-ViewModel 的缩写&#xff0c;它是一种基于前端开发的架构模式&#xff0c;其核心是提供对 View 和 ViewModel 的双向数据绑定&#xff0c;这使得 ViewModel 的状态改变可以自动传递给 View&#xff0c;即所谓的数据双向绑定。在 MVVM 的框架下视图…

Windows 11 操作系统最低硬件要求

以下是在您电脑上安装 Windows 11 操作系统的最低要求。如果您的电脑不满足这些要求&#xff0c;您可能无法在设备上安装全新的 Windows 11 操作系统。处理器&#xff08; CPU&#xff09;&#xff1a;1 GHz 或更快的支持 64 位的中央处理器&#xff08;双核或多核&#xff09;…

法国一家夜总会上演机器人钢管舞

全世界只有3.14 % 的人关注了青少年数学之旅星空新闻报道&#xff0c;法国SC-Club夜总会9月3日邀请机器人跳钢管舞&#xff0c;庆祝其开业5周年。该机器人脚踩高跟鞋&#xff0c;头上是一台CCTV监控仪。发明者称&#xff0c;这是为了引发人们对于“窥探”的思考。店主表示这次演…

Binding(三):资源和ValueConverter

这节讲资源和值转换器(ValueConverter)。资源在XAML中&#xff0c;我们想要使用外部的数据或者类&#xff0c;需要引入其命名空间&#xff0c;然后将其定义为XAML页面的资源&#xff0c;供给控件使用&#xff0c;或者我们需要封装一个共用的样式&#xff0c;同样也需要定义成资…

c语言 overflow_C语言和其他语言的不得不说的差别!

提到C语言&#xff0c;我们知道c语言和其他高级语言的最大的区别就是C语言是要操作内存的&#xff01;我们需要知道——变量&#xff0c;其实是内存地址的一个抽像名字罢了。在静态编译的程序中&#xff0c;所有的变量名都会在编译时被转成内存地址。机器是不知道我们取的名字的…

html省市区选择器代码,js实现一个省市区三级联动选择框代码分享

运行效果&#xff1a;部分代码&#xff1a;当然首先你数据库中要有这个table&#xff0c;不然你没有数据.....^_^所在地:${xzqh.province}js代码&#xff1a;/*** 加载市**/function loadCity() {var provinceId $("#provinceSelect option:selected").val();if(pro…

做人开心最重要

做人开心最重要 转载于:https://www.cnblogs.com/LeeWenjie/archive/2006/11/23/569502.html

你和学霸的差距,不只是成绩

教育不是只有在校园学习不是只有课堂阅读不是只有书上这几个移动的课堂&#xff0c;可以让大家随时关注它们带你学习更多知识【关注方式 】1 - 搜索公众号ID关注2 - 长按二维码识别关注数学好物ID: webaoming简介&#xff1a;“数学好物”是一个致力为数学爱好者与家长&#x…

Storyboard.storyboard could not be opened. Could not read the archive.

Storyboard.storyboard could not be opened. Could not read the archive. Please use a newer version of Xcode. Consider changing the documents Development Target to preserve compatibility. 用低版本xcode打开高版本xcode下创建的项目时会出现这个错误。 解决办法&a…

Binding(二):控件关联和代码提升

上节我们讲到&#xff0c;使用Binding&#xff0c;我们可以关联后台代码中的属性&#xff0c;在某些情况下&#xff0c;我们可能需要将两个控件关联起来&#xff0c;借助Binding&#xff0c;我们也可以轻松的实现。关联控件设想这样一个场景&#xff0c;界面中有个CheckBox&…

众望所归!中国机器狗能【后空翻】了。。。

全世界只有3.14 % 的人关注了青少年数学之旅在北京亦庄举办的世界机器人大会昨天结束了&#xff0c;这次大会上明显的感觉机械狗多了不少&#xff0c;中瑞福宁展示了四足多用途机器人Anymal&#xff0c;深度学习加持爬行、走路、跑步、跳舞样样精通&#xff1a;上楼梯的Anymal算…

男人别让爱你的女孩流泪

曾经以为付出就会有回报&#xff0c;付出才知道&#xff0c;在她的心里我始终不是最重要&#xff0c;无可奈何花落去&#xff0c;似曾相识燕归来。 经年少轻狂的我不知道什么是珍贵&#xff0c;直到有天&#xff0c;我回忆过去&#xff0c;我才知道眼泪的味道是咸的…… 第一次…

Binding(一):数据绑定

这节开始分几期来讲一下WPF中Binding的相关用法&#xff0c;本节主要讲使用Binding进行数据绑定。Binding的作用在WinForm中&#xff0c;我们要想对控件赋值&#xff0c;需要在后台代码中拿到控件对象进行操作&#xff0c;这种赋值形式&#xff0c;从根本上是无法实现界面与逻辑…

世纪渣男何书桓! | 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅&#xff08;图源网络&#xff0c;侵权删&#xff09;渣男&#xff0c;实锤&#xff01;↓ ↓ ↓

你也可以搞懂的微服务第一篇——来自ThoughtWork的学习体验

????欢迎点赞 &#xff1a;???? 收藏 ⭐留言 ???? 如有错误敬请指正&#xff0c;赐人玫瑰&#xff0c;手留余香&#xff01;????本文作者&#xff1a;由webmote 原创&#xff0c;首发于 【掘金】????作者格言&#xff1a;生活在于折腾&#xff0c;当你不折…

laravel缓存html,Laravel 静态页面缓存 JosephSilber/page-cache - 码农天地

JosephSilber/page-cache Laravel 静态页面缓存2020-02-26 09:39:53Laravel 页面缓存这个包允许您轻松地将响应缓存为磁盘上的静态文件&#xff0c;以便更快速地加载页面。包管理地址&#xff1a;安装&#xff1a;用 composer 安装 page-cache 包&#xff1a;composer require …

pca 累积方差贡献率公式_机器学习数据降维方法:PCA主成分分析

PCA在机器学习中很常用&#xff0c;是一种无参数的数据降维方法。PCA步骤&#xff1a;将原始数据按列组成n行m列矩阵X将X的每一行(代表一个属性字段)进行零均值化&#xff0c;即减去这一行的均值求出协方差矩阵求出协方差矩阵的特征值及对应的特征向量将特征向量按对应特征值大…