zoukankan      html  css  js  c++  java
  • 设计模式之简单工厂和单例模式

    近段时间发现自己越来越懒了,老师早就讲过的东西,一直没有总结!百度了一下,给的答案是设计模式总共23种。简单工厂属于其中一种,而单例模式并不是其中一种。今天总结下使用这两种模式写的项目。

    设计模式:设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的;设计模式使代码编制真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。

    一:简单工厂

    用简单工厂模式做出一个窗口程序计算器,之前写的控制台程序的计算器太简单了,老师说如果面试就只用一个Switch人家是不会要你的!

    1:首先创建一个计算的父类是个抽象类,类里有两个参与运算的参数,和一个抽象的计算方法;

    public abstract class Calc    {

           private int num1;     

       private int num2;      

      public int Num1    

        {   

             get { return num1; }  

              set { num1 = value; }    

        }

           public int Num2      

      {         

       get { return num2; }    

            set { num2 = value; }     

       }

           public abstract int MyCalc();   

    }

    2:创建子类加、减、乘、除等都继承父类,子类参数都是继承父类一样的,唯一方法不同,每个子类都有自己不同的计算方法!

    +:public  class Add:Calc                             -:public class Sub:Calc                      *: public class Mul:Calc
     {                                                                {                                                         {
            public override int MyCalc()                        public override int MyCalc()                 public override int MyCalc()
            {                                                           {                                                         {
               return this.Num1 + Num2;                        return this.Num1 - this.Num2;               return this.Num1*this.Num2;
              }                                                          }                                                        }
      }                                                              }                                                           }

      /: public class Div:Calc
        {
            public override int MyCalc()
            {
                int result=0;
                if (this.Num2!=0)
                {
                    result=this.Num1/this.Num2;
                }
                else
                {
                    MessageBox.Show("除数不能为0");
                }
                return result;
            }
        }

    3:创建一个工厂类,一般名字书写习惯以Factory结尾,这个工厂类有一个静态的带参数的父类类型的方法,根据传进参数的不同,New出不同的子类!

    public class CaculatorFactory
        {
           public static Calc CreateCalc(string oper)
           {
               Calc calc = null;
               switch (oper)
               {
                   case "+":
                      calc=new Add();
                       break;
                   case "-":
                      calc=new Sub();
                       break;
                   case "*":
                       calc=new Mul();
                       break;
                   case "/":
                       calc=new Div();
                       break;
               }
               return calc;
           }
        }

    4:当点击窗口计算按钮的时候,调用工厂类的静态方法,根据下拉框所选的运算符作为方法的参数,得出的一个父类返回值类型,然后自定义一个父类类型接受一下!

    把窗口TextBox的两个运算参数传给自定义父类类型的两个参数,再由传进去的运算符进入工厂类决定New哪个子类,然后父类调用子类的计算方法得出一个结果!

     //01.获取操作数和运算符
                int numLeft=Convert.ToInt32(txtNum1.Text);//第一个参与运算的参数
                int numRight = Convert.ToInt32(txtNum2.Text);//第二个参与运算的参数
                //运算符
                string oper = cboOperator.Text;
              Calc calc=  CaculatorFactory.CreateCalc(oper);
                calc.Num1 = numLeft;
                calc.Num2 = numRight;
                int result=calc.MyCalc();
                txtResult.Text = result.ToString();

    二:单例模式:单例模式就是保证在整个应用程序的生命周期中,在任何时刻,被指定的类只有一个实例,并为客户程序提供一个获取该实例的全局访问点。

    For  Example:我们一期的结业项目:MyKTV系统里有一个播放窗口,那时,每点击一次播放,程序就会创建出一个播放窗口,点的歌多了就卡机了,满屏都是播放窗口。

    这个时候就需要用上单例模式了。

    首先由于加载太耗时,VS不自带Windows Media Player组件,需要在工具箱下添加选择项COM组件下选择Windows Media Player组件添加进VS里,再拖到窗口上。

    1:创建一个自定义窗体类,如:FrmPlay。

    2:把系统自带的公有初始化组件方法改为私有

    效果为: private  FrmPlay()
            {
                InitializeComponent();
            }

    3:定义一个静态的和窗口类同类型的自定义变量

    效果为:private static FrmPlay play;

    4:再定义一个公有的静态窗口类型的方法

    效果为:public static FrmPlay Get()
           {
               if (play == null)
               {
                   play = new FrmPlay();
               }
               return play;
           }

        
            
                
          
       

  • 相关阅读:
    jsp mysql 配置线程池
    服务端 模拟 检测 攻击。。乱写
    硕思闪客精灵 7.2 破解版
    unity UnityAwe 插件
    smartfoxserver 2x 解决 Math NAN
    unity 断点下载
    java 监听文件目录修改
    wind7 64 setup appjs
    sfs2x 修改jvm 内存
    unity ngui 解决图层问题
  • 原文地址:https://www.cnblogs.com/345214483-qq/p/3734974.html
Copyright © 2011-2022 走看看