zoukankan      html  css  js  c++  java
  • 单例模式、简单工厂模式、XML解析

    单例模式:

    什么是单例模式?

    针对特定问题提出的特定解决方案

    为什么使用设计模式?

    让程序有更好的可扩展性

    在哪里使用?

    一般情况下,开发中真正使用设计模式的地方,JVM(虚拟机)底层机制模式

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Day08单例
    {
    //Play类
    public class Play { //构造 private Play() { }
      private static Play play;
    public static Play PlayOnlyOne(){ if(play==null){ play=new Play(); } return play; } } }
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Day08单例
    {
        class Program
        {
            static void Main(string[] args)
            {
                Play p1 = Play.PlayOnlyOne();
                Play p2 = Play.PlayOnlyOne();
                Console.WriteLine(p1==p2);
    
                Console.ReadLine();
            }
        }
    }

    单例模式:一个类在内存中只能有一个对象(条件)

    1.类的构造设为私有的

     //构造
          private Play() { }

    2.定义一个私有的静态的的类类型变量

    private static Play play;

    3.公有的静态的方法并且返回值类型为类类型的方法

     public static Play PlayOnlyOne(){
               if(play==null){
                    play=new Play();
               }
                return play;
          }

    简单工厂模式:

    简单工厂模式是类的创建模式,根据提供给它的数据返回几个可能类中的一个类的实例。

    优点:工程类中包含了必要地逻辑判断,根据客户端的选择条件动态实例化相关的类,对客户端来说,去除了与具体产品的依赖

    简单工厂模式关系图:

    下面是一个关于加减乘除运算的简单工厂模式

    定义一个父类:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Sj4
    {
      public  class Operation
        {
            public double Number1 { get; set; }
            public double Number2 { get; set; }
            public virtual double Reault() {
                double result = 0;
                return result;
             }
        }
    }

    子类,分别用来计算加减乘除

    加法:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Sj4
    {
       public class OperationAdd:Operation
        {
           public override double Reault()
           {
               double result = Number1 + Number2;
               return result;
           }
        }
    }
    
    
    //除法
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Sj4
    {
       public class OperationDiv:Operation
        {
            public override double Reault()
            {
                if(Number2==0){
                    throw new Exception("除数不能为0!");
                }
                double result = Number1 / Number2;
                return result;
            }
        }
    }

    (减法、乘法同样方法)

     将判断选择的是加减乘除的方法提取到一个类中。(为什么要提取到一类中呢?在你使用时不可能只有一个页面要用到相同的方法,为了避免代码的冗余,所以提取到一个类中)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Sj4
    {
       public class OperationFactory
        {
           public static Operation Gettance(string type){
               Operation op = null;
               switch (type)
               {
                   case "+":
                            {
                                op = new OperationAdd();
                                break;
                            }
                        case "-":
                            {
                                op = new OperationReduce();
    
                                break;
    
                            }
                        case "*":
                            {
                                op = new OperationRide();
                                break;
                            }
                        case "/":
                            {
                                op = new OperationDiv();
                                break;
                            }
               }
               return op;
           }
         
        }
    }

    在选择时调用这个方法

       Operation operation= OperationFactory.Gettance(type);

    XML解析

    XML称为可扩展标记性语言,是eXtensible Markup Language的缩写。在.NET框架中XML是非常重要的一部分,他用于描述数据、是当前处理结构化文档信息的有力工具

    操作XML的对象属性和方法

    对象 属性和方法 说明
    XmlDocument DocumentElement属性 获取根节点
    ChildNodes属性 获取所有子节点
    Load()方法 读取整个XML的结构
    XmlNode InnerText属性 当前节点的值
    Name属性 当前节点的名称
    ChildNodes属性 当前节点的所有子节点
    <?xml version="1.0" encoding="utf-8" ?>
    <Books>
      <Book>
        <Bookid>101</Bookid>
        <BookName>hah</BookName>
        <BookAnthor>lala</BookAnthor>
      </Book>
      <Book>
        <Bookid>102</Bookid>
        <BookName>hoho</BookName>
        <BookAnthor>xixi</BookAnthor>
      </Book>
      <Book>
        <Bookid>103</Bookid>
        <BookName>dudu</BookName>
        <BookAnthor>bubu</BookAnthor>
      </Book>
    </Books>
    <?xml version="1.0" encoding="utf-8" ?>是XML声明,version:文档符合XML1.0规范
    encoding:文档字符编码,默认utf-8

    解析XML文件
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Xml;
    namespace Sj1
    {
        class Program
        {
            static void Main(string[] args)
            {
    XmlDocument myXml
    = new XmlDocument(); myXml.Load("Book.xml"); //读取指定XML文件 XmlNode mynode = myXml.DocumentElement; //读取XML根节点 foreach(XmlNode node in mynode.ChildNodes){ //对子节点进行循环
    //将子节点的内容显示出来 Console.WriteLine(node[
    "Bookid"].InnerText + " " + node["BookName"].InnerText + " " + node["BookAnthor"].InnerText); } Console.ReadLine(); } } }

    注意:一个xml文件只能有一个根节点

    XmlElement继承XmlLinkeNode,XmlLinkeNode继承XmlNode

    XmlNode是XmlElement爷爷



  • 相关阅读:
    LeetCode: Trapping Rain Water
    LeetCode: Text Justification
    LeetCode: Unique Paths
    LeetCode: Unique Binary Search Trees
    向Google、Yahoo!和百度提交Sitemap网站地图
    Paypal IPN&PDT变量列表
    SQL查询和删除重复字段的内容
    [C#]基于.net技术的 Rss 订阅开发
    验证码识别流程
    c# string.Format 格式化日期
  • 原文地址:https://www.cnblogs.com/luoxionghenku/p/8296969.html
Copyright © 2011-2022 走看看