zoukankan      html  css  js  c++  java
  • 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();
            }
        }
    }
    View Code
  • 相关阅读:
    3. 安装 glance(控制节点)— OpenStack Queens 三节点部署
    2. 安装 keystone(控制节点)— OpenStack Queens 三节点部署
    1. 环境准备 — OpenStack Queens 三节点部署
    使用kubeadm搭建一个完整的kubernetes集群
    LeetCode–数组中重复的数字
    Java面试题——随机题(一),看看哪些你会哪些你不会
    jQuery DOM操作
    jQuery 选择器
    jQuery--基本语法
    jQuery--简介和使用
  • 原文地址:https://www.cnblogs.com/SoftWareIe/p/8972974.html
Copyright © 2011-2022 走看看