Edward_jie

for you, my Hall of Frame

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  92 随笔 :: 45 文章 :: 539 评论 :: 43万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

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图对比一下,就可以看到两者外表最明显的区别,就是接口的统一和适配问题。

代理模式

posted on   Edward_诺  阅读(1974)  评论(2编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示