C# 设计模式 (一)
学习来自《大话设计模式》有兴趣可以研究一下
一、简单工厂模式
原理 子类对象可以赋值给父类对象。同一个父类对象的子类,通过switch语句new出来(当然用if也可以但那样判断就多了起来)。
如:三个窗体form1、form2、form3都是继承自form对象这就可以声明一个 Form frm =nil; 再写个函数 如ShowFrm(string frmName){switch frmName case "1" frm=new form1.....}这样。用的时候 showFrm("1");就能出来form1对象了。
二、策略模式
个人理解就是通过配置写出对应的类型,再对读出的数据进行判断。
以前面向过程类的编程中也经常用到,
如:把填充下拉的数据通过数据库读出来;连接数据库用配置文件等。
三、单一原则
这个好理解就是一个类只做一件事性
如:数据库中一个表对应一个model类;计算器的加减乘除分别是一个类,而不是在一个类中
四、开放封闭原则
封闭的是原始的类,加功能了不要去改这个类,而是通过接口或部分类去往里加功能,这样能最大可能的保证软件的稳定性,当然原始类里有bug还是要改掉的
如:举个不恰当的例子(面向对像写的太少,暂时无法举出合适的例子) 在面向过程编程中,维护没有注释的代码,如果一个保存按钮已经很稳定了且逻辑很复杂,结果数据库里加了个字段保存里也要相应的字段进行保存,前边的代码不好动了,看着太累那么 保存完后,管他前边是insert还是update,直接在最后给来这个字段做个update 就好,原来的代码就相当于封闭 新代码就想当于扩展
五、依赖倒转(倒置)原则
抽象不依赖细节,细节依赖于抽象,也就是针对接口编程而不是针对实现
高层不应依赖于底层模块,两个应都依赖于抽象,也就是依赖终止于接口或抽象类,到了实现相与没有依赖关系
如:面向过程的函数库,要依赖连接数据库的函数 就是反面教材
六、装饰模式
这一个很有意思 感觉像是递归 代码如下:
using System;
using System.Reflection;
using System.Windows.Forms; namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{ Person xc = new Person("小菜"); TShirts ts = new TShirts();
Suit st = new Suit();
Trouser tsr = new Trouser(); ts.Component = xc;
st.Component = ts;
tsr.Component = st; tsr.Show(); Console.ReadKey();
}
} public class Person
{
public Person() { }
public Person(string name)
{
Name = name;
}
public string Name { get; set; } public virtual void Show()
{
Console.WriteLine("装扮{0}", Name);
}
} public class Finery : Person
{
public Person Component { get; set; } public override void Show()
{
if (this.Component != null)
Component.Show();
}
} public class TShirts : Finery
{
public override void Show()
{
Console.WriteLine("大t恤");
base.Show();
} } public class Trouser : Finery
{
public override void Show()
{
Console.WriteLine("垮裤");
base.Show();
}
} public class Suit : Finery
{
public override void Show()
{
Console.WriteLine("西装");
base.Show();
}
}
}
C# 设计模式 (一)的更多相关文章
- MVVM设计模式和WPF中的实现(四)事件绑定
MVVM设计模式和在WPF中的实现(四) 事件绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...
- java EE设计模式简介
1.何为设计模式 设计模式提供了对常见应用设计问题的解决方案.在面向对象的编程中,设计模式通常在解决与对象创建和交互相关的问题,而非整体软件架构所面对的大规模问题,它们以样板代码的形式提供了通用的解决 ...
- 计算机程序的思维逻辑 (54) - 剖析Collections - 设计模式
上节我们提到,类Collections中大概有两类功能,第一类是对容器接口对象进行操作,第二类是返回一个容器接口对象,上节我们介绍了第一类,本节我们介绍第二类. 第二类方法大概可以分为两组: 接受其他 ...
- 《JavaScript设计模式 张》整理
最近在研读另外一本关于设计模式的书<JavaScript设计模式>,这本书中描述了更多的设计模式. 一.创建型设计模式 包括简单工厂.工厂方法.抽象工厂.建造者.原型和单例模式. 1)简单 ...
- 《JavaScript设计模式与开发实践》整理
最近在研读一本书<JavaScript设计模式与开发实践>,进阶用的. 一.高阶函数 高阶函数是指至少满足下列条件之一的函数. 1. 函数可以作为参数被传递. 2. 函数可以作为返回值输出 ...
- 设计模式之行为类模式大PK
行为类模式大PK 行为类模式包括责任链模式.命令模式.解释器模式.迭代器模式.中介者模式.备忘录模式.观察者模式.状态模式.策略 ...
- .NET设计模式访问者模式
一.访问者模式的定义: 表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作. 二.访问者模式的结构和角色: 1.Visitor 抽象访问者角色,为该 ...
- Java开发中的23种设计模式详解
[放弃了原文访问者模式的Demo,自己写了一个新使用场景的Demo,加上了自己的理解] [源码地址:https://github.com/leon66666/DesignPattern] 一.设计模式 ...
- java 设计模式
目录: 设计模式六大原则(1):单一职责原则 设计模式六大原则(2):里氏替换原则 设计模式六大原则(3):依赖倒置原则 设计模式六大原则(4):接口隔离原则 设计模式六大原则(5):迪米特法则 设计 ...
- 设计模式之单例模式(Singleton)
设计模式之单例模式(Singleton) 设计模式是前辈的一些经验总结之后的精髓,学习设计模式可以针对不同的问题给出更加优雅的解答 单例模式可分为俩种:懒汉模式和饿汉模式.俩种模式分别有不同的优势和缺 ...
随机推荐
- upc组队赛6 Canonical Coin Systems【完全背包+贪心】
Canonical Coin Systems 题目描述 A coin system S is a finite (nonempty) set of distinct positive integers ...
- 自定义servlet重写doGet或者doPost方法时,405 method not allowed
自定义servlet public class TestServlet extends HttpServlet { @Override protected void doGet(HttpServlet ...
- 解决 使用migrations 执行update-database 出现System.InvalidOperationException: 实例失败的问题
好久没有使用Code First的方式来创建模型了 今天重温了一下 但是出现了很多问题 现在总结一下 在我做完初期的操作的之后,使用 update-database -verbose 更新数据库时, ...
- svnserve - 使用 `svn' 访问仓库时的服务器
SYNOPSIS 总览 svnserve [options] DESCRIPTION 描述 svnserve 允许使用 svn 网络协议访问 Subversion 仓库.它可以运行为独立的服务器进程, ...
- 【CSS】input 框的一些事情
1.input框光标太长与不居中的问题 如果input框height:40px 为了字体垂直居中line-height也设为40px 问题来了,这样光标在刚刚focus时候是占据整个input框并且输 ...
- javascript与jquery删除元素节点
今天工作的时候遇到一个删除的问题,研究了下发现是没有很好的区分js和jquery的删除方法,在此澄清一下 工作的代码如下 // 删除图片 $("#js_takePhotoWrap" ...
- DBCP重连的问题及解决办法(转)
本文转载:http://lc87624.iteye.com/blog/1734089,欢迎大家阅读原文. 使用数据库连接池时,免不了会遇到断网.数据库挂掉等异常状况,当网络或数据库恢复时,若无法恢复连 ...
- HBase之BlockCache数据读取(转)
转自:http://blog.csdn.net/u014297175/article/details/47976909 Hbase上Regionserver的内存分为两个部分,一部分作为Memstor ...
- Mysql安装多版本数据库
1.下载对应版本压缩包 2.解压缩文件 3.到解压缩文件,添加my.ini文件,修改相关的配置,如端口,文件路径等 # For advice on how to change settings ple ...
- EXCEL设置三级下拉框
EXCEL设置三级下拉框 1.添加下拉框数据源 公式--->指定 公式--->名称管理器 2.设置第一级下拉框的值 3.第一级下拉框选出一个值 4.设置第二级下拉框(INDIRECT($A ...