C设计模式.docx
- 文档编号:498716
- 上传时间:2022-10-10
- 格式:DOCX
- 页数:344
- 大小:252.72KB
C设计模式.docx
《C设计模式.docx》由会员分享,可在线阅读,更多相关《C设计模式.docx(344页珍藏版)》请在冰豆网上搜索。
C设计模式
C#设计模式
(1)
课本:
《C#设计模式》,电子工业出版社,ISBN7-5053-8979-3。
33元含光盘。
课程内容:
设计模式
来源:
亚历山大的建筑模式、Gamma等人(1995)创作的"DesignPatterns:
ElementsofReusableSoftware"。
这本书通常被称作"GangofFour"或"GoF",开创性的创造了《设计模式》。
也有人说"三十六计"就是"模式"。
一、 C#面向对象程序设计复习
点击/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(;
}
}
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卷:
公共语言运行库》。
C#设计模式
(2)
《人月神话》焦油坑、没有银弹
*软件腐化的原因:
问题所在 设计目标
----------------------------------------------------------------------------
过于僵硬 可扩展性(新性能可以很容易加入系统)
过于脆弱 灵活性(修改不会波及其它)
复用率低
粘度过高 可插入性(新功能容易加入系统(气囊加入方向盘))
*提高系统可复用性的几点原则:
传统复用:
1.代码的粘帖复用
2.算法的复用
3.数据结构的复用
*可维护性与可复用性并不完全一致
*对可维护性的支持:
一、"开放-封闭"原则(OCP)
Open-ClosedPrinciple原则讲的是:
一个软件实体应当对扩展开放,对修改关闭。
优点:
通过扩展已有软件系统,可以提供新的行为,以满足对软件的新的需求,使变化中的软件有一定的适应性和灵活性。
已有软件模块,特别是最重要的抽象层模块不能再修改,这使变化中的软件系统有一定的稳定性和延续性。
例子:
玉帝招安美猴王
当年大闹天宫便是美猴王对玉帝的新挑战。
美猴王说:
"'皇帝轮流做,明年到我家。
'只教他搬出去,将天宫让于我!
"对于这项挑战,太白金星给玉皇大帝提出的建议是:
"降一道招安圣旨,宣上界来…,一则不劳师动众,二则收仙有道也。
"
换而言之,不劳师动众、不破坏天规便是"闭",收仙有道便是"开"。
招安之道便是玉帝天庭的"开放-封闭"原则。
招安之法的关键便是不允许更改现有的天庭秩序,但允许将妖猴纳入现有秩序中,从而扩展了这一秩序。
用面向对象的语言来讲,不允许更改的是系统的抽象层,而允许更改的是系统的实现层。
二、里氏代换原则(LSP)
LiskovSubstitutionPrinciple(里氏代换原则):
子类型(subtype)必须能够替换它们的基类型。
白马、黑马
反过来的代换不成立
《墨子·小取》说:
"娣,美人也,爱娣,非爱美人也……"娣便是妹妹,哥哥喜爱妹妹,是因为两人是兄妹关系,而不是因为妹妹是个美人。
因此,喜爱妹妹不等同于喜爱美人。
用面向对象语言描述,美人是基类,妹妹是美人的子类。
哥哥作为一个有"喜爱()"方法,接受妹妹作为参数。
那么,这个"喜爱()"方法一般不能接受美人的实例。
一个违反LSP的简单例子(长方形和正方形)
public class Rectangle
{
private long width;
private long height;
public void setWidth(long width)
{
this.width = width;
}
public long getWidth()
{
return this.width;
}
public void setHeight(long height)
{
this.height = height;
}
public long getHeight()
{
return this.height;
}
}
public class Square
{
private long side;
public void setSide(long side)
{
this.side = side;
}
public long getSide()
{
return side;
}
}
正方形不可以做长方形的子类
using System;
public class Rectangle
{
private long width;
private long height;
public void setWidth(long width)
{
this.width = width;
}
public long getWidth()
{
return this.width;
}
public void setHeight(long heigh
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 设计 模式