zoukankan      html  css  js  c++  java
  • 软件分层架构下的另类设计框架-工厂模式的使用

    软件分层的原因

        面向对象原理中,有多态,继承等相关概念。为了提高程序的“高内聚、低耦合”。也为了更容易扩展,容易维护,同时适应程序的延展性能,开始产生了分层的概念。

    现有常见设计模式

    • 普通三层架构

    User Interface 表示层

      与用户展示界面交互,提供数据内容

    Business   Logic   Layer,数据层

      用于给表示层提供数据内容,对数据运算和操作,同时也负责响应表示层的事件。

    Data Access Layer 数据访问层

      直接操作数据库,针对数据的增添、删除、修改、查找等。

    • MVC

      模型(Model):就是封装数据和所有基于对这些数据的操作。
      视图(View):就是封装的是对数据显示,即用户界面。
      控制器(Control):就是封装外界作用于模型的操作和对数据流向的控制等。

     

    使用工作方法构建我们自己的应用框架

    这将会是一个新颖的设计架构模式,在整体上运算和逻辑上拆分,每个运算模块只负责相应的数据。分成三个逻辑运算,读取,运算,输出。这个优势在于每个模块只做一部分功能,不会影响其他功能,以提高代码复用率,降低耦合度;更加有利于扩展调配。例如我们可以派生多个子类运算,子类运算可配置为并发或顺序运行。

     

    工厂方法接口

    输入

      /// <summary>
        /// 用户读取配置和数据库文件等
        /// </summary>
        public class Input
        {
            public event Action OnReadFinished;
    
            public virtual void ReadConfig()
            {
                if (OnReadFinished != null)
                    OnReadFinished();
            }
        }
    Input

    计算

     /// <summary>
        /// 负责运算过程
        /// </summary>
        public class Function
        {
            public event Action OnCalcFinished;
    
            public virtual void Calculate()
            {
                if (OnCalcFinished != null)
                    OnCalcFinished();
            }
        }
    Calculate

    输出

    /// <summary>
        /// 负责输出操作
        /// </summary>
        public class Output
        {
            public virtual void Write()
            { 
            }
        }
    Output

    接口的继承

    继承于输入接口

      public class InputTest : Moudle.Input.Input
        {   
            public override void ReadConfig()
            {
                base.ReadConfig();
            }
        }
    InputTest

    继承于计算接口

     public class FunctionTest:Module.Function.Function
        {
            public override void Calculate()
            {
                base.Calculate();
            }
        }
    CalculateTest

    继承于输出接口

    public class OutputTest:Module.Output.Output
        {
            public override void Write()
            {
                base.Write();
            }
        }
    OutputTest

    接口的调用

     static void Main(string[] args)
            {
                Input input = new InputTest();
                input.OnReadFinished += new Action(input_OnReadFinished);
                input.ReadConfig();
            }
    
            static void input_OnReadFinished()
            {
                Function function = new FunctionTest();
                function.OnCalcFinished += new Action(function_OnCalcFinished);
                function.Calculate();
            }
    
            static void function_OnCalcFinished()
            {
                Output output = new OutputTest();
                output.Write();
            }
    Dispatch

    通过以上内容,实现了自定义的一个框架模式,在一个完整项目周期中,我们可以按照不同的需求派生出子类实现不同的业务。

  • 相关阅读:
    科学美国人(Scientific American)部分段落小译
    Matlab安装使用libsvm
    【转】Matlab中特殊符号的写法
    计算机视觉资源
    AdaBoost
    AdaBoost人脸检测原理
    NLP常用开源/免费工具(转)
    搜索背后的奥秘——浅谈语义主题计算
    求数组当中子数组最大和
    求二叉树中两个节点的最低父节点
  • 原文地址:https://www.cnblogs.com/yzp12sina/p/3546322.html
Copyright © 2011-2022 走看看