学习来自《大话设计模式》有兴趣可以研究一下

一、简单工厂模式

原理 子类对象可以赋值给父类对象。同一个父类对象的子类,通过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# 设计模式 (一)的更多相关文章

  1. MVVM设计模式和WPF中的实现(四)事件绑定

    MVVM设计模式和在WPF中的实现(四) 事件绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...

  2. java EE设计模式简介

    1.何为设计模式 设计模式提供了对常见应用设计问题的解决方案.在面向对象的编程中,设计模式通常在解决与对象创建和交互相关的问题,而非整体软件架构所面对的大规模问题,它们以样板代码的形式提供了通用的解决 ...

  3. 计算机程序的思维逻辑 (54) - 剖析Collections - 设计模式

    上节我们提到,类Collections中大概有两类功能,第一类是对容器接口对象进行操作,第二类是返回一个容器接口对象,上节我们介绍了第一类,本节我们介绍第二类. 第二类方法大概可以分为两组: 接受其他 ...

  4. 《JavaScript设计模式 张》整理

    最近在研读另外一本关于设计模式的书<JavaScript设计模式>,这本书中描述了更多的设计模式. 一.创建型设计模式 包括简单工厂.工厂方法.抽象工厂.建造者.原型和单例模式. 1)简单 ...

  5. 《JavaScript设计模式与开发实践》整理

    最近在研读一本书<JavaScript设计模式与开发实践>,进阶用的. 一.高阶函数 高阶函数是指至少满足下列条件之一的函数. 1. 函数可以作为参数被传递. 2. 函数可以作为返回值输出 ...

  6. 设计模式之行为类模式大PK

                                        行为类模式大PK 行为类模式包括责任链模式.命令模式.解释器模式.迭代器模式.中介者模式.备忘录模式.观察者模式.状态模式.策略 ...

  7. .NET设计模式访问者模式

    一.访问者模式的定义: 表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作. 二.访问者模式的结构和角色: 1.Visitor 抽象访问者角色,为该 ...

  8. Java开发中的23种设计模式详解

    [放弃了原文访问者模式的Demo,自己写了一个新使用场景的Demo,加上了自己的理解] [源码地址:https://github.com/leon66666/DesignPattern] 一.设计模式 ...

  9. java 设计模式

    目录: 设计模式六大原则(1):单一职责原则 设计模式六大原则(2):里氏替换原则 设计模式六大原则(3):依赖倒置原则 设计模式六大原则(4):接口隔离原则 设计模式六大原则(5):迪米特法则 设计 ...

  10. 设计模式之单例模式(Singleton)

    设计模式之单例模式(Singleton) 设计模式是前辈的一些经验总结之后的精髓,学习设计模式可以针对不同的问题给出更加优雅的解答 单例模式可分为俩种:懒汉模式和饿汉模式.俩种模式分别有不同的优势和缺 ...

随机推荐

  1. python调用tushare获取沪深A股票资金流向数据

    接口:moneyflow 描述:获取沪深A股票资金流向数据,分析大单小单成交情况,用于判别资金动向 限量:单次最大提取4000行记录,总量不限制 积分:用户需要至少1500积分才可以调取,基础积分有流 ...

  2. 使用pip 时报错 Fatal error in launcher: Unable to create process using '"D:\pytghon2.7\python.exe" "D:\python2.7\S

    无法创建使用pip.exe创建进程,说白了就是无法启动pip安装插件. 解决方法升级pip: python -m pip install -U pip  

  3. html 中手写阴影弹窗框封装

    // 弹出提示框 function popup(pWidth,content) { $("#msg").remove(); var html ='<div id=" ...

  4. elementUI 的el-pagination 分页功能

    <div class="block1"> <el-pagination @size-change="handleSizeChange" @cu ...

  5. MySQL字符集不一致导致查询SQL性能问题

    今天做了一个MySQL数据库中的SQL优化. 结论是关联字段字符集不同,导致索引不可用. 查询的SQL如下: select `Alias`.`Grade`, `Alias`.`id`, `Alias` ...

  6. 子元素位于父元素中央 css实现

    wrap .box{ width: 200px; height:200px; background: pink; // 方案1 position: absolute; top:0; left:0; r ...

  7. LeetCode Array Easy 189. Rotate Array

    ---恢复内容开始--- Description Given an array, rotate the array to the right by k steps, where k is non-ne ...

  8. java多线程面试题_线程并发面试题

    1.什么是线程?线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速.比如,如果一个线程完成一个 ...

  9. elasticsearch启动问题

    ES安装完一直启动不了,问题解决. 报错: ERROR: bootstrap checks failed system call filters failed to install; check th ...

  10. Yii2使用PHPExcel读取excel

    个人使用过程中保存一些使用PHPExcel的经验,以便后来翻阅:与PHP的Yii框架结合,可以轻松使用.而且根本不用网上所说的修改Yii的自动加载文件等方法.具体使用方法:下载phpoffice ht ...