`

设计模式与动态语言 之 抽象工厂模式 abstract factroy

阅读更多
抽象工厂模式是一种在动态语言中不太常用的创建型设计模式,它的别名是kit

概述:在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时由于需求的变化,往往存在着更多系列对象的创建工作。如何应对这种变化?如何绕过常规的对象的创建方法(new),提供一种“封装机制”来避免客户程序和这种“多系列具体对象创建工作”的紧耦合?这就是我们要说的抽象工厂模式。

意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类

动机:
考虑一个支持多种视感(look-and-feel)标准的用户界面工具包。
不同的视感风格为诸如滚动条、窗口和按钮等用户界面“窗口组件”定义不同的外观和行为。
为保证视感风格标准间的可移植性,一个应用不应该为一个特定的视感外观硬编码它的窗口组件。
在整个应用中实例化特定视感风格的窗口组件类将使得以后很难改变视感风格。

结构:


适用性:
  • 一个系统要独立于它的产品的创建、组合和表示时;
  • 一个系统要由多个产品系列中的一个来配置时;
  • 当你要强调一系列相关的产品对象的设计以便进行联合使用时;
  • 当你提供一个产品类库,而只想显示它们的接口而不是实现。



动态性:

ActiveRecord中 从 database.yml 配置得到
是OracleConnection 类还是 MysqlConnection类就是一种工厂模式。


效果:
  • 分离了具体的类;
  • 使得易于交换产品系统;
  • 有利于产品的一致性。


缺点:难以支持新种类的产品。


例子:

class AbstractFactory
  def create_cls(name)
    raise 'Abstract not access.'
  end
end

class Factory < AbstractFactory
  def create_cls(name)
    # On rails has name.constantize
    eval(name)
  end
end

class AbstractPrdA
  attr_accessor :name
  def initialize(name)
    @name = name || self.class.name
  end
end

class PrdA1 < AbstractPrdA
end

class PrdA2 < AbstractPrdA
end

class AbstractPrdB
  attr_accessor :name
  def initialize(name)
    @name = name || self.class.name
  end
end

class PrdB1 < AbstractPrdB
end

class PrdB2 < AbstractPrdB
end

puts Factory.new.create_cls('PrdA1').name
puts Factory.new.create_cls('PrdA2').name
puts Factory.new.create_cls('PrdB1').name
puts Factory.new.create_cls('PrdB2').name


类图:





源码及UML点击下载
  • 大小: 67 KB
  • 大小: 31.5 KB
分享到:
评论

相关推荐

    Java中的design-patterns::open_book:使用通俗易懂的案例,类图,以及配套学习笔记来详解Java的二十种设计模式!

    :hot_beverage: 用Java实现的设计模式〜 ... :check_mark:抽象工厂模式( Abstract Factroy Pattern ) :memo: , :check_mark:建造者模式( Builder Pattern ) :memo: , :check_mark:单例模式( S

    JAVA工具factroy.rar

    在IT行业中,Java是一种广泛应用的编程语言,尤其在企业级应用开发中占据着主导地位。"JAVA工具factory.rar"这个压缩包很可能包含了与Java开发相关的工具、库或框架,而"springcloud dubbo"标签则指向了两个重要的...

    重量分拣仿真 博途1500程序及设计说明,Factory IO场景

    重量分拣仿真项目,博途1500程序及设计说明,Factory IO场景 在这个场景中我们需要实现通过此部分的物料可以被测重并通过中间的分拣装置分拣到三个方向的传送带上面。控制柜需要实现手动单次分拣与自动多次分拣的...

    .NET原型模式讲解

    原型模式是一种创建型设计模式,它允许我们通过复制已有对象来创建新对象,而不是通过调用构造函数。在.NET框架中,原型模式可以借助于`ICloneable`接口或序列化机制来实现。原型模式分为浅复制和深复制两种类型。 ...

    Factory. IO工厂结合西门子博途v16做的一个仿真控制 有电气图纸+Factory仿真软件+博途程序+博途v16安装包

    《Factory.IO与西门子博途V16的仿真控制集成详解》 在现代工业自动化领域,模拟仿真已经成为设计和测试控制系统的重要手段。本资源集合是关于“Factory.IO工厂结合西门子博途V16”的一个综合实例,旨在帮助学习者...

    Setup+Factory+7.0+制作安装程序

    Setup Factory是一款强大的安装程序制作工具,专为开发者和企业设计,用于创建专业级的Windows安装包。这款软件基于JAVA技术,使得它具有跨平台的能力,同时也保持了与Windows操作系统的高度兼容性。在本文中,我们...

    TX12官网生产固件2.3.11

    内含官网出厂固件: 1. TX12_Factory SDCARD include firmware and EEPROM.zip 2. multi-cc2500-v1.3.2.6.bin 3. opentx-tx12-en-2.3.11-otx.bin

    Symbol Factory 2.0组态图库,可设置资源缩放

    《Symbol Factory 2.0 组态图库:资源缩放与应用详解》 Symbol Factory 2.0 是一款专为工控领域设计的高效组态图库软件,其核心特性在于提供丰富的图形资源,并支持用户自定义设置,如修改底色和调整资源的缩放比例...

    factoryfx:Java数据和依赖项注入框架

    依赖注入基于工厂的依赖项注入模式的实现。 数据(重新)注入(类似于依赖项)可以将数据注入Java对象中。 支持OOP并避免OR映射或外部配置文件。 允许在运行时优化(部分)重新配置。 关键概念 为什么要使用...

    rxview激光雷达上位机

    至于压缩包中的"RSView_Xviaer_3.1.7-Factroy-45a2e92d568",这很可能是RxView软件的特定版本,版本号为3.1.7,带有工厂预设配置,用于确保用户在初始安装时即可获得稳定的工作环境。其中的"45a2e92d568"可能是该...

    宝峰BF-T1迷你版对讲机写频软件(含线序图和出厂配置文件)

    文件"BF-T1_Factroy.dat"是出厂配置文件,它包含了对讲机在出厂时预设的所有默认设置。如果用户需要恢复对讲机到初始状态或需要参考标准配置,可以使用这个文件进行导入。在某些情况下,如对讲机出现异常或误操作...

Global site tag (gtag.js) - Google Analytics