您的位置:首页 > 编程语言 > C#

初涉c#设计模式-几种易混淆的设计模式区别

2012-05-29 21:00 253 查看
StrategyPattern和Simple Factory的区别和用法

Strategy Pattern主要用于抽象特定算法或行为的设计模式模式,外表类似于简单工厂模式,但简单工厂模式主要用于生成产品,返回new实例,然后进行相应的编程,而策略模式倾向于指定的唯一的算法策略,初始化实例策略类之后,直接调用算法。在简单工厂中我们只需要传递相应的条件就能得到想要的一个对象,然后通过这个对象实现算法的操作,因为简单工厂中我们实现了switch来处理到底实例化哪个对象。而策略模式使用时必须在客户端首先创建一个想使用的类对象,然后将该对象最为参数传递进去,通过该对象调用不同的算法,因为策略模式中并没有为我们实现具体实例的选取,只是从抽象类中调用了统一接口。在简单工厂模式中实现了通过条件选取一个类去实例化对象,策略模式则将选取相应对象的工作交给模式的使用者,它本身不去做选取工作。

策略模式:定义算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户,属于行为模式,侧重于行为。

简单工厂:将对象的创建完全独立出来,让对象的创建和具体的使用客户无关,实际上的抽象工厂模式属于创建模式,而简单工厂只能算的上是一种编程思想,侧重于创建具体实例。

他们没有本质的区别,只是使用的场景和适合用到的地方是不一样的。

策略模式具体适用于:

1.以不同的格式保存文件;

  2.以不同的算法压缩文件;

  3.以不同的算法截获图象;

  4.以不同的格式输出同样数据的图形,比如曲线 或框图bar等。

Adapter Pattern和Proxy Pattern的区别和用法

适配器模式:将一个类的接口转换成客户希望的另外一个接口,使得原本接口不兼容而不能一起工作的那些类可以一起工作。代理模式和被代理者的接口是同一个,只是使用中客户访问不到被代理者,所以利用代理间接的访问。这种情况下客户端可以不使用适配,完全可以自己写全新的代码实现自己的方法,但使用了adapter,客户就可以利用现有实现,将一个类的接口转换成客户希望的另外一个接口. 解决接口不兼容问题,也很好的实现了复用。

代理模式:为其他对象提供一种代理以控制对这个对象的访问,侧重于统一的接口名字的情况,因为无权限访问对象内容而设置一个代理帮助处理事务,比如webservice的应用,比如中介公司,都是客户端帮助其本身处理他处理不了的任务的代理元素。大多数运用在代码维护的后期,或者借用第三方库的情况下。举例代码:

View Code

//统一获得工资入口
public interface Salery
{
string GetSalery();
}
//技术部的代理,因为技术部对公司工资没有访问权限,需要设置人力资源部的代理,来获得工资
class TeckDepartmentProxy : Salery
{
private HRDepartment aHR;
public string GetSalery()
{
if (aHR == null)
{
aHR = new HRDepartment();
}
return aHR.GetSalery();
}
}
//人力资源部,随时获得员工工资
class HRDepartment
{
public string GetSalery()
{
return "1k";
}
}
class Program
{
static void Main(string[] args)
{
Salery aTeck = new TeckDepartmentProxy();
Console.WriteLine(aTeck.GetSalery());
}


两种设计模式其实都是为了代码复用,遵循开闭原则的设计思想。通过UML图对比一下,就可以看到两者外表最明显的区别,就是接口的统一和适配问题。

代理模式



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: