3 camellias_

尚未进行身份认证

暂无相关简介

等级
TA的排名 24w+

设计模式(九)之工厂模式

工厂模式:定义一个用于创建对象的接口,让子类来决定实例化哪一个类,工厂方法使一个类的实例化延迟到子类。之前我们看过简单工厂类,使用的是计算器作为例子。代码如下:简单工厂类Factory.csusing System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Thr...

2020-04-30 16:50:01

设计模式(八)之静态代理模式

代理模式:为其他对象提供一种代理以控制对这个对象的访问。其通用设计图如下图所示:精髓是RealSubject类和Proxy类都实现Subject,使用Proxy类来限制对RealSubject类的访问Subject抽象主题类: 抽象主题类可以是抽象类也可以是接口,是一个最普通的业务类型定义,无特殊要求RealSubject具体角色:也叫做被委托角色,被代理角色。是业务逻辑的具体执行者。P...

2020-04-17 00:47:43

设计模式(七)之装饰模式

装饰器模式,顾名思义,就是对已经存在的某些类进行装饰,以此来扩展一些功能。下图为其结构图:四个主要角色分别为:抽象构件(Component)角色:给出一个抽象接口,以规范准备接受附加责任的对象。具体构件(ConCreteComponent)角色:定义一个将要接受附加责任的类。装饰(Decorator)角色:持有一个构件(Component)对象的实例,并定义一个与抽象构件接口一致的接口...

2020-03-23 22:55:30

设计模式(六)之里氏替换原则

里氏替换原则,为继承定义规范。里氏替换原则有如下特点:代码共享,减少创建类的工作量提高代码的重用性提高代码的可扩展性提高产品代码的开放性继承侵入性 只要继承,必须拥有父类的内容降低代码的灵活性,子类必须拥有父类的属性和方法增强耦合性。里氏替换原则:有一功能P1,由类A完成。现需要将功能P1进行扩展,扩展后的功能为P,其中P由原功能P1与新功能P2组成。新功能P由类A的子类B来完...

2020-03-15 15:05:34

设计模式(五)之依赖倒转原则

依赖倒置原则的包含如下的三层含义: 高层模块不应该依赖低层模块,两者都应该依赖其抽象 抽象不应该依赖细节 细节应该依赖抽象就是面向接口编程,采用依赖倒置原则可以减少类间的耦合性,提高系统的稳定性,降低并行开发引起的风险,提高代码的可读性和可维护性。举个例子,小明开奔驰车。我们需要两个底层模块,司机类,奔驰车类。以及调用其二者的高层模块正常来写是这样子的:Pro...

2020-03-05 21:37:49

设计模式(四)之开放封闭原则

开放封闭原则:软件实体(类、模块、函数等等)应该可以扩展,但是不可以修改。也就是如果需求发生变化导致程序中多个依赖模块都发生了级联的改动,就说明这个程序是有问题的,程序变得相对脆弱、无法重用。开放封闭原则就相对的解决了这个问题,它强调的是你设计的模块应该从不改变(绝对不改变是不可能的,只能相对少改动)。当需求变化时,你可以通过添加新的代码来扩展这个模块的行为,而不去更改那些已经存在的可以工作的...

2020-02-27 13:40:08

设计模式(三)之单一职责原则

单一职责原则:官方给的说法是:就一个类而言,应该仅有一个因其他变化的原因。说白了就是,一个类只负责一项职责。最简单也是最难的原则。难处在于对职责进行划分。单一职责原则提出了一个编写程序的标准,用“职责”或“变化原因”来衡量接口或类设计得是否优良,但是“职责”和“变化原因”都是不可度量的,因项目而异,因环境而异。软件设计真正要做的内容,就是发现职责并把那些职责互相分离。单一职责原则可以使类的...

2020-02-21 13:37:15

设计模式(二)之策略模式

策略模式:定义了算法家族,分别封装起来,让其之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。下边使用例子来具体分析:制作一个商场收银的软件,营业员根据客户购买的单价和数量,向客户收费。并附带打折的选项。效果如下图所示:主要部分代码:using System;using System.Windows.Forms; namespace strategy{ p...

2020-02-20 16:19:40

设计模式(一)之简单工厂模式

简单工厂模式,他并不属于23种设计模式;它的实现和它的名字气质很符;就是简单;先来说下应用场景:当你不确定,有多少种操作的时候,例如:计算器中的 + - * /我们可以使用简单工厂模式。我们就以上边说过的加减乘除运算举例:建立一个控制台应用,输入两个数字和一个运算符,得到结果。不好的实例:我这里使用C#语言编写程序static void Main(string[] args) ...

2020-02-17 14:10:23

C#自学笔记(二十一)之派生类中的构造函数 object类

今天看下派生类中的有参数和无参数的构造函数以及object类:1:无参数构造函数:/* C#主要的运行函数,就是main函数 */ static void Main(string[] args) { // 五参数构造函数 C obj = new C(); /* * ...

2019-07-18 14:21:01

C#自学笔记(二十)之C#接口interface

最近工作中需要使用到接口interface。可是接口是用来做什么的?我看了一些网上的例子,目前我看到的大多数接口的功能为一下两点:1:接口作为约束与规范我们可以根据需求来定义接口,然后我们再定义类来实现这个接口。接口为一个或多个类提供规范。2:优化程序设计面向对象设计中我们追求的原则之一就是高内聚,低耦合。可是类与类之间往往会有千丝万缕的关系,比如泛化、实现、组合、聚合、关联、依赖。而接口...

2019-07-17 23:07:16

C#自学笔记(十九)之抽象类abstract

C#中的抽象类(abstract)。1:抽象方法只作声明,而不包含实现,可以看成是没有实现体的虚方法2:抽象类不能被实例化3:抽象类可以但不是必须有抽象属性和抽象方法,但是一旦有了抽象方法,就一定要把这个类声明为抽象类4:具体派生类必须覆盖基类的抽象方法5:抽象派生类可以覆盖基类的抽象方法,也可以不覆盖。如果不覆盖,则其具体派生类必须覆盖它们。6:抽象类中的非抽象方法,如果该方法是静态...

2019-07-04 08:33:19

C#自学笔记(十八)之C#虚方法virtual

C#中的继承,C#是面向对象语言,面向对象三种特性:封装、继承、多态。这里主要是继承,这篇只是基础首先定义一个基类:积累中含有一个使用virtual定义的一个虚方法。virtual关键字用于在基类中修饰方法。virtual的使用会有两种情况:1、在基类中定义了virtual方法,但在派生类中没有重写该虚方法。那么在对派生类实例的调用中,该虚方法使用的是基类定义的方法。2、在基类中定义了v...

2019-07-03 09:12:41

C#自学笔记(十七)之C#重载

C#中的重载:包含两个方面,函数重载,运算符重载(1):函数重载最简单的例子就是Console.writeLine即可以打印字符串变量,又能打印整型变量。class yunsuan { // 下边的两个方法除了返回值类型不同之外,其余都相同。 // 这被称为C#的重载。 public static int chu(int a,int b) { retur...

2019-07-02 13:38:00

C#自学笔记(十六)之C#类中的成员属性 构造函数 析构函数

C#中类的成员属性、构造函数、析构函数。代码是基于昨天类的代码进行测试的。基本代码:/*声明对象*/cat Tom = new cat();Tom.age = -1; //设置年龄Tom.TalkAge(); //输出:我今年-1岁了类中的方法:/*我今年几岁了*/public void TalkAge(){ Console.WriteLine("我今年{0}岁...

2019-07-01 10:08:28

C#自学笔记(十五)之C#中的类

C#中的类。首先定义一个类文件。点击项目 -> 添加类(这里没有办法截图)理解万岁。C#中的类与PHP中的类是类似的,只要能实例化,在哪都可以调用。person gc = new person("GC",23,new cat()); // 实例化Console.WriteLine("我叫{0},{1}岁了,我有一只猫{2}", gc.name, gc.age, gc.jerry....

2019-06-30 09:52:57

C#自学笔记(十四)之函数(方法)

C#的函数1:声明函数C#的函数和php的函数功能相同,但是定义方法不同函数状态 + 返回类型 + (参数){ Method body:方法主体,包含了完成任务所需的指令集。}注意返回类型一定要与定义好的返回类型保持一致。函数可以没有参数。实例:/*** 定义一个静态函数 */static int hanshu(int a, int b, int c){ ...

2019-06-29 10:40:29

C#自学笔记(十三)之字符串string

C#字符串:1:定义一个字符串string one, two;one = "hello";two = " gc";2:使用 + 链接字符串// 字符串链接string str = one + two;Console.WriteLine(str); // 输出hello gc3:string类的属性Chars获取固定值在某个字符串中的位置(这个如何使用,需要研究)char ...

2019-06-24 09:02:00

C#自学笔记(十二)之数组(二)

C#数组。1:多维数组定义二位数组int[,] array = new int[,] {{1,2,3},{4,5,6},{7,8,9},{10,11,12}};使用for foreach循环遍历二维数组// 使用for循环遍历二位数组for (int i = 0; i < array.GetLength(0); i++){ for (int f = 0; f &lt...

2019-06-22 09:42:22

C#自学笔记(十一)之数组(一)

C#中的数组。C#的数组和我之前使用的PHP的数组完全不一样。C#的数组是需要实例化的,实例化的方式有两种1:直接赋值。2:使用new关键字,实例化的时候要声明维度和每个维度的长度。1:定义数组数组创建必须有数组大小或数组初始值设定项声明数组的同时给数组赋值数据类型+数组标示 = {成员1,成员2,……};例://定义一个数组int[] array = { 1, 2, 3, ...

2019-06-20 09:09:04

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv2
    勤写标兵Lv2
    授予每个自然周发布4篇到6篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。