设计模式之简单工厂和单例模式

近段时间发现自己越来越懒了,老师早就讲过的东西,一直没有总结!百度了一下,给的答案是设计模式总共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;
       }

设计模式之简单工厂和单例模式

时间: 2024-12-06 13:25:46

设计模式之简单工厂和单例模式的相关文章

【幻化万千戏红尘】qianfengDay10-java基础学习:成员内部类、静态内部类、局部和匿名内部类,设计模式之简单工厂模式

课程回顾: 接口:1.属性:public\static\final2.方法:public\abstract 多态:1.静态化(编译时)多态重载2.动态化(运行时)多态重写对象转型 1.向上转型 2.向下转型 今日内容:内部类:定义在类的内部的类1.成员内部类格式:[修饰符] class 类名 { }内部不能有静态的属性和方法,可以访问外部类的属性,也可以调用外部类的方法 在静态方法中的使用格式:外部类 外对象=new 外部类();成员内部类 对象名=外对象.new 成员内部类(); 2.静态内部

01.设计模式_简单工厂模式

转载自  http://www.cnblogs.com/zhili/p/SimpleFactory.html 一.引言 这个系列也是自己对设计模式的一些学习笔记,希望对一些初学设计模式的人有所帮助的,在上一个专题中介绍了单例模式,在这个专题中继续为大家介绍一个比较容易理解的模式--简单工厂模式. 二.简单工厂模式的介绍 说到简单工厂,自然的第一个疑问当然就是什么是简单工厂模式了? 在现实生活中工厂是负责生产产品的,同样在设计模式中,简单工厂模式我们也可以理解为负责生产对象的一个类, 我们平常编程

C#设计模式(2)——简单工厂模式

一.引言 这个系列也是自己对设计模式的一些学习笔记,希望对一些初学设计模式的人有所帮助的,在上一个专题中介绍了单例模式,在这个专题中继续为大家介绍一个比较容易理解的模式——简单工厂模式. 二.简单工厂模式的介绍 说到简单工厂,自然的第一个疑问当然就是什么是简单工厂模式了? 在现实生活中工厂是负责生产产品的,同样在设计模式中,简单工厂模式我们也可以理解为负责生产对象的一个类, 我们平常编程中,当使用”new”关键字创建一个对象时,此时该类就依赖与这个对象,也就是他们之间的耦合度高,当需求变化时,我

C#设计模式(2)-简单工厂模式

引言 上一遍中介绍了设计模式中的单例模式-C#设计模式(1)-单例模式,本篇将介绍简单工厂模式,也是比较容易理解的一种模式:本文将以多数据库操作为例进行讲解: 简单工厂模式简介 什么是简单工厂模式? 定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类.因为在简单工厂模式中用于创建实例的方法是静态(static)方法,因此简单工厂模式又被称为静态工厂方法模式,它属于创建型模式. 在现实生活中工厂是负责生产产品的,同样在设计模式中,简单工厂模式我们也可以理解为负责

【设计模式】简单工厂模式

以面向对象的思想和简单工厂模式,写一个C++计算器程序,代码如下: #include <iostream> using namespace std; class Operation { public: Operation(double left, double right) { lhs = left; rhs = right; } const double GetLeft() const { return lhs; } const double GetRight() const { retur

设计模式之简单工厂模式

设计模式之简单工厂模式 动机:         不暴露实例化逻辑来创建对象.通过公共的接口创建新的对象.         这是一个简单的实现,客户端需要一个product,但是client不直接使用new对象,而是通过提供需要的对象信息来找factory得到新的product.         这个factory实例化一个具体的product并返回(转化成抽象的类),client段使用这个抽象的类而不用考虑它具体的实现. 应用举例:        也许工厂模式是使用最多的模式之一.举个例子,一个

初识设计模式之--简单工厂

作为一个刚刚入门的菜鸟.虽只学到了些许编程语言的皮毛(或者连皮毛都算不上),但是随着时间和学习的深入,"设计模式"这一专业术语便慢慢浮现在眼前. 到底何为设计模式呢?它的出现将会给我们带来哪些帮助?......等等一系列问题便会出现在我们脑海中.俗话说:问题才是探究知识的钥匙.就让我们带着 自己的疑问一同来学习设计模式. 首先,我们先来认识一下什么是设计模式,以及运用设计模式的优点. 设计模式的简单理解:模式是在某一背景下某个问题的一种解决方案.1.复用解决方案——通过复用已经公认的设

每天一个设计模式-1 简单工厂

每天一个设计模式-1  简单工厂 1.简单工厂的定义 提供一个创建对象实例的功能,而无须关心其具体实现(核心). 虽然不能让模块外部知道模块内部的具体实现,但模块内部是可以知道具体实现类的.干脆在模块内部建一个类,用这个类来创建接口,然后把创建号的接口返回给客户端:这样,外部应用就只需要根据这个类来获取相应的接口对象,通过这个接口对象就可以操作接口定义的方法了.显然,这个类就像一个工厂,专门用来生成(生产)需要的接口对象. 2.简单的例子 说明: 代码: Api:接口,wear是一个公有方法.

设计模式初探—简单工厂模式

为什么要学习设计模式? 可重用.可维护.可扩展.灵活性好 什么是简单工厂模式? 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例.简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现. 简单工厂模式的好处? (1)将具体业务和实现进行分离 (2)将多个具体业务之间进行解耦 解决的问题? 单独的类来创造