博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
单列模式 和 操作XML方法 和 简单工厂模式
阅读量:5014 次
发布时间:2019-06-12

本文共 1696 字,大约阅读时间需要 5 分钟。

一.单列模式

  1)首先,该Singleton的构造函数必须是私有的,以保证客户程序不会通过new()操作产生一个实例,达到实现单例的目的;

  2)因为静态变量的生命周期跟整个应用程序的生命周期是一样的,所以可以定义一个私有的静态全局变量instance来保存该类的唯一实例;

  3)必须提供一个全局函数访问获得该实例,并且在该函数提供控制实例数量的功能,即通过if语句判断instance是否已被实例化,如果没有则可以同new()创建一个实例;否则,直接向客户返回一个实例。

  在这种经典模式下,没有考虑线程并发获取实例问题,即可能出现两个线程同时获取instance实例,且此时其为null时,就会出现两个线程分别创建了instance,违反了单例规则。因此,需对上面代码修改。

 

二.操作XML方法

向文件中添加新的数据的时候,首先也是通过XmlDocument加载整个文档,然后通过调用SelectSingleNode方法获得根结点,通过CreateElement方法创建元素,用CreateAttribute创建属性,用AppendChild把当前结点挂接在其它结点上,用SetAttributeNode设置结点的属性.具体代码如下:

三.简单工厂模式

public class Operation    {        //public static Program GetInlt(string oper) {        //    Program pro = null;        //    switch (oper)        //    {        //        case "+":        //            pro =add() ;        //            break;        //        case "-":        //            pro = lid();        //            break;        //        case "*":        //            pro = milte();        //            break;        //        case "/":        //            pro = div();        //            break;        //        default:        //            break;        //    }        //    return pro;        //}    }

  

简单工厂的优点只要如下:

①实现了对象的创建和使用职责的分离

②客户端无须知道具体的类名,只需要使用就行,也在一定程度上减轻了复杂对象名称的记忆量。

③通过引入配置文件,可以在不修改客户端代码的情况下更换和增加新的具体类,提高了灵活性。

简单工厂的缺点如下:

①工厂集中了所有具体类的创建工作,职责过重,一旦抛出异常,整个系统会受到影响。

②使用简单工厂模式势必会增加系统种类的个数,也就增加了系统的复杂度和理解难度。

③系统扩展困难,一旦要增加新的具体类,就不得不修改工厂类的逻辑,在产品类型较多时,有可能造成工厂逻辑过于复杂,不利于系统的扩展和维护。

④简单工厂模式由于使用了静态的方法,造成工厂角色无法形成基于继承的等级结构,在C#语言中,类的实例没有办法访问静态方法和静态的变量,无法在客户端代码中针对工厂父类编程,二在运行时使用工厂子类来覆盖父类,因此,工厂类不能得到很好的扩展。

 简单工厂的使用环境:

①工厂类负责创建的对象比较少,由于创建的对象比较少,所以不会造成逻辑过于复杂。

②客户端只知道传入工厂类的参数,对于如何创建对象并不关心。

 

转载于:https://www.cnblogs.com/1287758807cjh/p/8296789.html

你可能感兴趣的文章
如何成为F1车手?
查看>>
QT自定义消息
查看>>
Save (Not Permitted) Dialog Box
查看>>
装饰模式(Decorator)
查看>>
任务13:在Core Mvc中使用Options
查看>>
利用Excel 2010数据透视图实现数字的可视化的图形直观展示
查看>>
Sort Colors
查看>>
iview树的修改某个节点,树刷新后自动展开你刚才展开的所有节点
查看>>
oracle服务起不来以及无法监听问题解决
查看>>
Mvc--Html.ActionLink()的用法
查看>>
delphi 基础书籍推荐
查看>>
《面向对象程序设计》2018年春学期寒假及博客作业总结
查看>>
iOS开发UI之KVC(取值/赋值) - KVO (观察某个对象的某个属性的改变)
查看>>
1.7 将一个MxN矩阵所有为0的元素所在行和列全部置0
查看>>
删除U盘时提示无法停止‘通用卷’设备的解决方法!!不要每次都硬拔了,对电脑有不小的损害!!!...
查看>>
Java中接口与接口和类之间的关系
查看>>
芯片TPS70925
查看>>
linux shell 发送email 附件
查看>>
人群密度估计 CrowdCount
查看>>
JSON.parse()和JSON.stringify()
查看>>