zoukankan      html  css  js  c++  java
  • 设计模式------简单工厂模式(三)

    简单工厂几乎都算不上是设计模式,同时也不符合开放-封闭的面向对象原则,每次的修改都要更改工厂类,但是同时也是平时中用的最多的一种设计模式,比如数据访问层设计多数据库访问。

     简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。 就是说解耦全部靠工厂类来实现。

    下面,我们以经典的计算器为案例,分析下简单工厂。

     创建运算操作符的基类,定义2个变量,一个运算的方法。

        public abstract class 操作符基类
        {
            public double A;
            public double B;
            public abstract double 运算();
        }

    实现操作符的加减乘除类(这个可随意扩展,也符合开放封闭原则)

     public class 加法 : 操作符基类
        {
            public override double 运算()
            {
                return A + B;
            }
        }
    
        public class 减法 : 操作符基类
        {
            public override double 运算()
            {
                return A - B;
            }
        }
    
    
        public class 乘法 : 操作符基类
        {
            public override double 运算()
            {
                return A * B;
            }
        }
    
    
        public class 除法 : 操作符基类
        {
            public override double 运算()
            {
                if (B.Equals(0))
                {
                    throw new Exception("被除数不能为0");
                }
                return A / B;
            }
        }

    工厂类,用来负责创建对象,解耦合,但是这个类会经常改动,这是一个非常大的缺点。

     
     public static 操作符基类 创建操作类(string op)
            {
                操作符基类 result = null;
    
                switch (op)
                {
                    case "+":
                        result = new 加法();
                        break;
                    case "-":
                        result = new 减法();
                        break;
                    case "*":
                        result = new 乘法();
                        break;
                    case "/":
                        result = new 除法();
                        break;
                }
                return result;
            }

    客户端调用起来非常方便,最重要的时候 不用管里面的实现。

      static void Main(string[] args)
            {
                操作符基类 op = 简单工厂.创建操作类("+");
                op.A = 1.0;
                op.B = 3.5;
    
                Console.WriteLine(op.运算());
                Console.ReadLine();
            }

    简单工厂模式:就是如何去实例化对象的问题,对于很容易变化的问题,应该考虑用一个单独的类来做这个创造实例的过程,这就是工厂。

     

    人生匆匆几十年,BeYourself...
  • 相关阅读:
    Ubuntu使用之Svn命令小技巧
    Android
    Python&MySQL&PyQt
    YII进行数据增删改查分析
    UVA270-Lining Up
    block高级功能
    HDU-2665-Kth number(划分树)
    Android模糊演示样例-RenderScript-附效果图与代码
    HTTP状态码具体解释
    近期写的一个控件——Well Swipe beta 1.0
  • 原文地址:https://www.cnblogs.com/huagege/p/7562866.html
Copyright © 2011-2022 走看看