合作开发用到的几个 设计模式

 

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

 

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

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.职责链模式

 

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

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

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

 

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

 

 

 

 

posted @ 2013-04-23 19:49  坚固66  阅读(190)  评论(0编辑  收藏  举报