单例模式、简单工厂模式、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爷爷



原文地址:https://www.cnblogs.com/luoxionghenku/p/8296969.html