第一章 设计模式概述
设计模式能够使解决方案既优雅简单,又可复用。设计模式仅仅是一些项目之间和程序员之间面向对象代码的简便方法,设计模式背后的思想很简单:对通用的对象间的相互作用方式进行记录和编目(程序员经常发现这些对象见的相互终于哦用方式很有用)。换言之,设计模式描述了对象如何进行通信才能不牵扯相互的数据模式和方法,保持这种独立性一直是一个好的面向对象程序设计的目标。从而可以实现代码的可复用性。
1. 设计模式
设计模式是对读者经常遇到的设计问题的可再现的解决方案。
设计模式建立了一系列描述如何完成软件开发领域中特定任务的规则。
设计模式更关注于复用和重复出现的结构设计方案,而框架注重于具体的设计和实现。
模式提出了一个发生在特定设计环境中的可重复出现的设计问题,并提供了解决方案
模式识别并确定类和实例层次上或组件层次上的抽象关系
设计模式有三种类型
创建型模式是创建对象而不是直接实例化对象,这会使程序在判断给定情况下创建那一个对象时更灵活。
结构型模式可以将一组对象组合成更大的结构,例如复杂的用户界面和报表数据
行为型模式定义系统内对象间的通信,以及复杂程序中的流程控制
2. 关于面向对象方法
封装和继承能让程序员达到分离类的目的,一个继承父类的类能访问父类所有方法和所有非私有变量,但是如果一个功能完整的类开始继承层次结构,可能过多的限制住了自己,也会给特定的实现带去累赘,设计模式建议遵循下列原则:针对接口编程,而不是针对实现编程。即在任何类层次结构的顶端,定义的是一个抽象类或一个接口,他没有实现方法,但是定义了该类需要支持的方法,这样在所有的派生类中,就会有更大的自由度去实现这些方法,能最大限度地满足你的要求。
对象组合,这是一种可以包含其他对象的对象结构,即把几个对象封装在另一个对象中,当编写比较复杂的程序,对象组合具有一些优势,新的对象拥有一个最适合于要完成的目标的接口,而不是拥有父类中的所有方法,说明了编程的第二个原则:优先使用对象组合,而不是继承。
C#基础知识
C#、java和vb的区别
C#和Java都是区别大小写的;C#中的每一条语句都已分号结束;而vb是不区分大小写的,
C#中的修饰符const的含义是:被命名的值是一个常数,不能更改。
数据类型
基本数据类型的长度与计算机或操作系统的类型无关。
宽度窄的数据类型可以直接赋给较宽的数据类型,并能自动转化为新类型。
可以通过强制转化把较宽的类型缩减成较窄的类型,这种转化需要把数据类型的名称放在圆括号内。
Java和c#的布尔变量只能接受保留字true和false所表示的值,与c和c++不同,不能将数值型数据赋给布尔型变量,也不能在布尔类型和其他数据类型之间转化。
数值与字符串间的转化,可以使用Convert类的方法实现数值转化成字符串或将字符串转化成数值。例如:
String s=Convert.ToString(x);
Float y=Convert.ToSingle(s); //single代表一个单精度浮点数
数值型对象也提供了各种格式话方法类指定小数位数;
Float x=12.3453234f;
String s=x.ToString(“###.###”); //gives 12.345
注意最后一位进行四舍五入
C#和java允许在一条语句里声明同一类型的多个变量
数值型常量,任何数如果没有小数部分的话,就自动为整数类型,如果有小数部分 ,就自动为double类型,如果想指定成不同的类型,可以使用各种前缀和后缀字符。
C#中有三个保留字常量,true、false和null,null表示一个对象变量还没有 指定任何对象。
字符常量
用但引号把字符括起来表示字符常量,转意字符和c、java中约定的一样。
C#和java的区别
1. 许多系统对象方法都有相同的方法名,只是在大小写形式上有区别
2. C#不提供throws关键字,该关键字使编译器检查你是否铺货了一个方法抛出的异常。
3. C#对于布局管理器有更多的限制,因为他是以windows系统为中心的,大多数时候采用的图形元素的绝对位置。
4. C#允许运算符重载
5. C#引进了代理和索引器
6. C#有枚举类型
7. C#有不安全模式,在这种模式下可以使用指针
8. 必须专门声明一个方法能被覆盖及一个方法能覆盖另一个方法
9. 不能通过声明来区别继承和接口实现,他们的声明方式是一样的
10. Switch语句允许使用字符串变量,如果变量没有被匹配,必须有一个默认情况,否则会出现错误,break语句是必须的。
11. 布尔值变量类型在C#中拼为“bool”,而java中拼为“boolean”
C#和C的区别
1. C#通常不能使用指针
2. 可以在一个方法里的任何位置声明变量,不必把声明语句放在方法的顶端
3. 使用一个对象前,不一定要声明它,可以在用到的时候在定义
4. C#对结构体类型偶那个的定义有些不同,他根本不支持联合类型
5. C#有枚举类型,允许一系列被命名的量(如颜色或一周里的每一天)赋值为连续的数值,但是语法有些不同。
6. C#没有位域,也就是说,变量至少要占用一个字节的存储空间
7. C#不支持变长参数列表,必须针对参数值和类型定义一个方法,然而C#语句允许函数的最后一个参数为可变参数数组
8. C#引入了代理和索引器的思想,这些在其他流行的语言中是没有的。
用C#编写windows程序
1. C#中的对象
C#中的任何食物都被看做是对象,对象包含数据并具有操作数据的方法,
整型变量、浮点型变量和双精度型变量也是对象,他们也具有方法
注意:
数值类型的转化是用方法而不是外部函数完成的。在把一个数值格式化成一个特定的字符串时,每种数值类型都提供了一个格式化方法。
2. 受管语言和垃圾自动收集
C#和VB.NET都是受管语言,有两个含义:一个是两者被编译成中间的底层语言,都使用通用语言运行时(Common Language Runtime,CLR)执行编译后的代码,或者进一步编译这些代码。另一方面,受管语言都是垃圾自动收集的,垃圾自动收集语言负责师傅拿个不用的内存,垃圾收集系统一旦检测到变量、数组或对象不在被引用,就把相应的内存空间释放回系统,在大多数情况下,根本不用考虑内存的分配与释放问题。