• 设计模式抽象工程(Abstract Factory)随想


        抽象工厂(Abstract Factory)模式可能是程序员最熟悉的设计模式了,平常好像也没有哪位大侠来谈论这个(可能是害怕掉价吧),特别是在.NET开发平台下,抽象工厂的光芒早已被反射技术所掩盖,抽象工厂模式的地位逐渐下降,慢慢的淡出了我们的视线。
        抽象工程模式的意图是提供一个创建一些相互关联或者相互依赖的对象或者对象族的接口。使用抽象工厂的最主要目的是剥离了对象的消费者和具体对象之间的依赖关系,从而可以保证了在不触及对象的消费者的情况下改变对象。
        使用抽象工厂的一个关键点或者说必要条件是需要创建的对象是相关的或者互相依赖的。例如,一个随机图片生产工厂,需要创建图片需要的背景了前景,接口如下:
    public interface IStageFactory
    {
        public IBackground CreateBackground();
        public IForeground CreateForeground();
    }
        由于在此种场景下创建的两个对象直接存在相关性,不可能让一条鱼的前景显示到沙漠的背景上。
    如果创建的对象之间没有相关性或者依赖关系,那么就一定不要使用抽象工厂,因为在这种应用场景中抽象工厂属于一个杂凑体,将不必要的依赖关系引入到工厂接口的消费者(也许某一个工厂的使用类压根就不需要依赖工厂创建的某个类型),并且不满足单一职责原则。此外,由于程序员的懒惰有可能将更多不必要的类型创建职责揉合到工厂接口中。
        但是,如果创建的对象存在相关性或者相互依赖,那么最好使用抽象工厂模式,虽然通过反射可以达成相同的目的,但是反射的约束不是强制的,很可能在配置信息中引入错误,导致难以追踪和发现的Bug。



  • 相关阅读:
    C/C++各种类型int、long、double、char表示范围(最大和最小)
    XSS学习笔记(五)-XSS防御
    组态Log4j(非常具体的)
    C#抽象类其中创建一个静态方法
    DirectSound应用
    谈论Hibernate级联删除——JPA根据Hibernate实现许多级联删除CascadeType.DELETE_ORPHAN
    failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
    英语语法总结---一、英语中定语放在哪
    windows常用命令有哪些(整理)
    css如何实现垂直居中(5种方法)
  • 原文地址:https://www.cnblogs.com/zengezenge/p/823067.html
Copyright © 2020-2023  润新知