zoukankan      html  css  js  c++  java
  • 合作开发用到的几个 设计模式

    自上次的个人版的机房收费系统后, 接下了的就是合作版的开发了. 

    要求是尽量添加一些设计模式,毕竟自己开发的时候用到的设计模式还是有限的,这次的重点不是在代码上.重点是

    1 文档驱动;2.项目经理写文档不能讨论;3.分层开发完成完成;4.相对应的文档发给相对应的人,不能把所有文档都

    发给一个人;5.尽量加设计模式;6.SVN使用;7.进度控制

    针对上述要求,添加了一些设计模式.对于版本控制的问题这里不细说,后续篇章讲解

     

    首先是

    1.简单工厂 

    简单工厂是工厂类 需要了解所有一些运算的类

     

    他们完成的内容不同,但是都用同一个接口,就可以用工厂的方法实现

     

    (但不支持增加新产品,可以修改产品的具体方法)

     在于简单工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。

    缺点:当需要增加新产品时,需要修改工厂类,不符合开放封闭原则。

    2. 策略模式与工厂结合

    策略模式是运用抽象的方法,将具有相同的属性和功能的对象进行抽象集合成类,如 ,打折 无论是几折,都是抽象

    的.以策略模式是对算法的抽象,分别封装起来,让他们之间相互替代,算法的变化,不会影响到使用算法的客户.

    与简单工厂相结合,这样客户端认识的类就少了,只需要认识ContextFacotry就可以了

    事例:

    ConetextFactory money=new ConetextFactory();

    如果不结合那么简单工厂就需要认识两个类,耦合比较大

    Strategy money= ConetextFactory.createCash()客户端认识了两个类,strategy和ConetextFactory.

     

    3.模板方法

     

    模板方法是运用继承的思想,将所有重复的代码都上升到父类去,而不是让每个类都去重复.

    当我们要完成一些细节层次一致的过程或是一系列步骤,但其个别的步骤在更详细的层次上实现可能不同时, 我们通常考虑用到模板的方法来处理

    实例

    多个人作答同样的卷子,问题都是一样的,只是每个人的答案有所不同

    于是我们就可以用模板的方法,增加虚方法.

     

    Class Test

    {

      public void TestQuestion1()

    {

    Console.WriteLIne("问题");

    }

    }

    我们增加虚方法

    Public Void TestQuestion1()

    {

    Console.wrilte("问题");

    console.writeLine("答案"+Answer1());

    }

    Protected virtualstring Answer1()

    {

     return" ";

    }

     

    然后子类重写虚方法就可以把答案填上了.其他什么都不用管了.因为父类建立了所有的重复的模板了

     

    子类有:

    Clalss TestPagerA: Test

    {

     protected overrdie string Answer1()

    {

     return "b";

    }

    }

    若多个学生答题,则只需要修改重写类的返回值就可以了.方法简单了好些吧.

      

    所以模板方法也可以说是 定义一个操作的算法骨架, 将一些步骤延迟到了子类中. 自来可以重新定义算法的某些

    特定步骤.

    4.单例模式

     

    单列模式i的应用: (SingleTon)

    保证一个类仅有一个实例,并提供一个访问它的全局访问点.

    Singleton

    -instance: Singleton

    -Subgketib()

    +GetInstance()

     

     

    密封类Sealed的应用

     

     不允许重写基类的方法

    密封类不能被继承 ,不会重写基类的方法。

    双重锁定功能的应用 ,防止多线程同时调用singleton的getinstance方法,造成创建多个实例

     

    运用Lock锁的方法

     

    Private static Singleton instance;

    Private static readonly object syncRoot=new object();

    Private Singleton()

    {}

    Public static singleton Gettinstacne()

    If(=null)

    {

     lock(syncroot)

    {

     if (=null)

    {

       instance=new singlton();

    }

    |

    }

     

    如果用抽象工厂,那么这个单例模式是一定要用到了,因为这样避免了很多的再次创建 工厂了.

    5.职责链模式

    可以设置上机准备时间(分钟)、最少上机时间(分钟)、递增时间(分钟)、固定用户半小时费用、临时用户

    每小时费用。学生下机结账时,如果上机时间在准备时间内这段时间不计费,如果上机时间大于上机时间小于最少

    上机时间则按最少上机时间收费,如果上机时间大于最少上机时间,则按递增时间段收费

    当然了,还有先前用到的外观,抽象工厂加反射的模式.这就不重复了

     

     

     

  • 相关阅读:
    PetaPOCO 一对多 多对一 多对多
    PetaPoco使用要点
    MySQL_杭州北仓 12.3-12.7需求活动期间累计下单达到3天及以上的客户_20161212
    Python 2.7_Second_try_爬取阳光电影网_获取电影下载地址并写入文件 20161207
    Python 2.7_First_try_爬取阳光电影网_20161206
    MySQL计算销售员昨日各指标综合得分_20161206
    MySQL_关于用嵌套表计算的可以不用 20161205
    MySQL_财务统计各产品品类各城市上周收入毛利表_20161202
    借助取色工具ColorPix对Pycharm编辑器设定自己喜欢的代码颜色_20161202
    python2.7 爬虫_爬取小说盗墓笔记章节及URL并导入MySQL数据库_20161201
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3038609.html
Copyright © 2011-2022 走看看