[Architecture Pattern] Factory Builder

[Architecture Pattern] Factory Builder

目的

同时提供延迟注入对象、挂载注入项目这两个功能

情景

在开发系统时,如果需要在运行时间才生成并注入对象,可以套用Factory模式来提供延迟注入对象功能。例如:一个监控系统在火警发生时,建立功能对象来启动相关设备(洒水设备、警报设备、警消通报)。

  • 物件图

但在实作过程中,延迟注入对象这个功能,常常需要伴随挂载注入项目功能,用以增加系统的延展性,这时可以接着套用Builder模式,来提供挂载注入项目功能。例如:一个监控系统在火警发生时,依照购买版本建立功能对象来启动相关设备(V1:洒水设备、警报设备;V2:洒水设备、警报设备、警消通报;V3:....)。

  • 物件图

本篇文章介绍上述这个Factory模式、Builder模式组合而成的Factory Builder模式。这个模式定义对象之间的职责跟互动,用来为系统同时提供延迟注入对象、挂载注入项目这两个功能,用以增加系统的延展性。主要为自己做个纪录,也希望能帮助到有需要的开发人员。(使用DI Framework也能提供相关功能)

  • 示意图

结构

  • 物件图

参与者

System

- 拥有一个Factory

  • 使用Factory来生成Product。
  • 使用Product来提供系统功能。

Factory

  • 拥有多个Builder
  • 使用Builder来生成Product。
  • 在条件生成Product情景中,Factory封装条件逻辑。

Builder

  • 生成Product,生成参数由Builder提供。
  • 在条件生成Product情景中,Builder封装条件参数。

Productm

  • 封装系统功能。
  • 透过Builder生成并注入到系统。

合作方式

  • 顺序图

实作

  • 类别图

  • ActionFactory
    public class ActionFactory
    {
        // Fields
        private readonly IEnumerable<ActionBuilder> _actionBuilderCollection = null;
    
        // Constructors
        public ActionFactory(IEnumerable<ActionBuilder> actionBuilderCollection)
        {
            // Default
            _actionBuilderCollection = actionBuilderCollection;
        }
    
        // Methods
        public IEnumerable<IAction> Create()
        {
            // Result
            List<IAction> actionList = new List<IAction>();
    
            // Create
            foreach (var actionBuilder in _actionBuilderCollection)
            {
                var action = actionBuilder.Create();
                if (action == null) throw new InvalidOperationException();
                actionList.Add(action);
            }
    
            // Return
            return actionList;
        }
    }
    
  • ActionBuilder
    public abstract class ActionBuilder
    {
        // Methods
        public abstract IAction Create();
    }
    
  • Action
    public interface IAction
    {
        // Methods
        void Execute();
    }
    
  • SecuritySystem
    public class SecuritySystem
    {
         // Fields
        private readonly ActionFactory _actionFactory = null;
    
        // Constructors
        public SecuritySystem(ActionFactory actionFactory)
        {
            // Default
            _actionFactory = actionFactory;
        }
    
        // Methods
        public void Execute()
        {
            // Create
            var actionCollection = _actionFactory.Create();
            if (actionCollection == null) throw new InvalidOperationException();
    
            // Execute
            foreach(var action in actionCollection)
            {
                action.Execute();
            }
        }
    }
    
  • 系统挂载:洒水设备、警报设备
    class Program
    {
        static void Main(string[] args)
        {
            // Initialize
            var actionBuilderList = new List<ActionBuilder>();
            actionBuilderList.Add(new WateringActionBuilder());
            actionBuilderList.Add(new AlarmActionBuilder());
            var securitySystem = new SecuritySystem(new ActionFactory(actionBuilderList));
    
            // Execute
            securitySystem.Execute();
    
            // End
            Console.ReadLine();
        }
    }
    

  • 系统挂载:洒水设备、警报设备、警消通报
    class Program
    {
        static void Main(string[] args)
        {
            // Initialize
            var actionBuilderList = new List<ActionBuilder>();
            actionBuilderList.Add(new WateringActionBuilder());
            actionBuilderList.Add(new AlarmActionBuilder());
            actionBuilderList.Add(new NotifyActionBuilder());
            var securitySystem = new SecuritySystem(new ActionFactory(actionBuilderList));
    
            // Execute
            securitySystem.Execute();
    
            // End
            Console.ReadLine();
        }
    }
    

下载

范例程序代码:点此下载

时间: 2024-12-28 21:46:42

[Architecture Pattern] Factory Builder的相关文章

[Architecture Pattern] Singleton Locator

[Architecture Pattern] Singleton Locator 目的 组件自己提供Service Locator模式,用来降低组件的耦合度. 情景 在开发系统时,底层的Infrastructure Context.或是核心的Domain Context这些共享对象生成之后,会在系统的许多地方被使用.为了减少共享对象初始生成.参考传递所造成的困扰,可以在系统内套用Service Locator模式,提供统一的静态参考点来生成.存取这些共享对象. Service Locator参考

[Architecture Pattern] Repository实作查询功能

[Architecture Pattern] Repository实作查询功能 范例下载 范例程序代码:点此下载 问题情景 在系统的BLL与DAL之间,加入Repository Pattern的设计,能够切割BLL与DAL之间的相依性,并且提供系统抽换DAL的能力.但在软件开发的过程中,套用Repository Pattern最容易遇到的问题就是,如何在Repository中实作「查询」这个功能.像是在下列这个查询订单的页面,系统必须要依照用户输入的查询条件,来从DAL中查询出所有符合条件内容的

[Design Pattern] Factory Pattern 简单案例

Factory Pattern , 即工厂模式,用于创建对象的场景,属于创建类的设计模式 . 下面是一个工厂模式案例. Shape 作为接口, Circle, Square, Rectangle 作为具体类实现了 Shape 接口. ShapeFactory 封装了创建各个 Shape 的方式,隐藏了 new 命令.FactoryPatternDemo 用于演示工厂模式. 具体代码: Shape 接口定义 public interface Shape { public void draw();

design pattern factory method #Reprinted#

引入人.工厂.和斧子的问题: (1),原始社会时,劳动社会基本没有分工,需要斧子的人(调用者)只好自己去磨一把斧子,每个人拥有自己的斧子,如果把大家的石斧改为铁斧,需要每个人都要学会磨铁斧的本领,工作效率极低.对应Java里的情形是:java程序里的调用者new一个被调用者的实例.类耦合度极高,修改维护烦琐,效率极低. (2),工业社会时,工厂出现,斧子不再由普通人完成,而由工厂生产,当人们需要斧子的时候,可以到工厂购买斧子,无需关心斧子是怎么制造出来的,如果废弃铁斧为钢斧,只需改变工厂的制造工

Design Pattern ——Factory Method&amp;Abstract Factory

今天开始复习设计模式.设计模式相关的资料有很多,概念性的东西就画个图就可以了.把关注点放在例子上,设计模式还是要使用中才有感受. 从Factory Method&Abstract Factory开始. 一.Factory Method 工厂方法模式的用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中. 我们的例子如下: 我们项目中有一个代码提交记录releasenote,我们需要将这个releasenote分成csv/xls/xml格式分别导出 1 public interface

Architecture Pattern: Publish-subscribe Pattern

1. Brief 一直对Observer Pattern和Pub/Sub Pattern有所混淆,下面打算通过这两篇Blog来梳理这两种模式.若有纰漏请大家指正. 2. Role Publisher:消息发布者,组装原始消息实体并触发消息传递的主体. Subscriber:消息订阅者,接收消息实体并作出响应的主体. Message Broker or Event Bus:消息发布者 与 消息订阅者 间的媒介,内含消息过滤和消息路由的功能,并可通过内置的消息队列(message queue)现实优

Design Pattern :Factory and Reflect in java

interface page {     void Render(); } class pageA implements page {     @Override     public void Render() {          System.out.println("I am " + this.getClass().getName());     } } class pageB implements page {     @Override     public void Re

[Architecture Design] 跨平台架构设计

[Architecture Design] 跨平台架构设计 跨越平台 Productivity Future Vision 2011 在开始谈跨平台架构设计之前,请大家先看看上面这段影片,影片内容是微软在2011年所描绘的未来生活蓝图.在观看的过程中,请大家以「软件开发人员」的角度来思考,想想软件开发人员在其中扮演甚么样的角色. 「Productivity Future Vision 2011」 这段影片里面所描绘未来产品,把时间轴拉到现在来看,其实有许多概念已经悄悄融入我们的生活之中.像是影片

简单工厂设计模式(Simple Factory Design Pattern)

[引言]最近在Youtub上面看到一个讲解.net设计模式的视频,其中作者的一个理解让我印象很深刻:所谓的设计模式其实就是运用面向对象编程的思想来解决平时代码中的紧耦合,低扩展的问题.另外一点比较有见解的是,区分了设计模式(Design Pattern),结构模式(Architecture Pattern),架构类型(Architecture Style). 如下图所示 Design Pattern:是基于代码层面的,就是针对解决功能模块之间的问题而采用恰当的设计模式,比如依赖注入,简单工厂,适