初涉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
两种设计模式其实都是为了代码复用,遵循开闭原则的设计思想。通过UML图对比一下,就可以看到两者外表最明显的区别,就是接口的统一和适配问题。
代理模式
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图对比一下,就可以看到两者外表最明显的区别,就是接口的统一和适配问题。
代理模式
相关文章推荐
- 桥接模式与其它几种相近的设计模式之间的区别与比较
- <<.NET B/S 架构实践>> 几种概念区别 - 算法、设计模式、企业应用架构模式、架构模式
- 几种常见设计模式区别与优缺点
- 【设计模式 2】设计模式的来源,及其相混淆的模型、框架、架构区别
- 【设计模式 2】设计模式的来源,及其相混淆的模型、框架、架构区别
- 【设计模式 2】设计模式的来源,及其相混淆的模型、框架、架构区别
- C#设计模式学习资料--创建者模式
- 深入浅出设计模式(C#版)--策略模式
- 乐在其中设计模式(C#) - 代理模式(Proxy Pattern)
- C#设计模式- 建造者模式
- C#基础篇 重写与重载,以及其中设计的虚方法和抽象方法的使用和区别
- JAVA几种设计模式 浅谈并概括
- Java基础---Java---IO流-----BufferedReader、BufferedWriter、缓冲区、装饰设计模式及和继承的区别
- 设计模式这个东西 刚刚发现几种模式好像大同小异啊
- C#设计模式(2)——简单工厂模式
- 设计模式:简单工厂、工厂方法、抽象工厂之小结与区别
- C#设计模式之2——工厂方法模式
- 【设计模式】C++单例模式的几种写法——Java自动加载内部类对象,C++怎么破?
- C#设计模式(4)-Simple Factory Pattern
- JS几种常用对象设计模式