设计模式实践之从工厂模式到创建模式整体源码分析
先定义一个接口, 确定计算工资的方法, 如下:
using System;
namespace ConsoleApp
{
public interface ISalary
{
void CommandSalary();
}
}
下面各地不同的子公司分别继承这个接口的CommandSalary方法,下面是深圳与北京二个地方的计算方法。设计二个类如下:
代码
using System;
namespace ConsoleApp
{
public class ShenZhenSalary : ISalary
{
public void CommandSalary()
{
Console.WriteLine("这是深圳子公司的工资计算模块");
}
}
}
北京子公司
代码
using System;
namespace ConsoleApp
{
public class BeiJinSalary : ISalary
{
public void CommandSalary()
{
Console.WriteLine("这是北京子公司的工资计算模块");
}
}
}
到里面基本类已经设计完成, 好多人都会在代码中要用到时候new一个出来,这样的代码可能会造成难以维护, 给人好乱的感觉。 或像下面的代码那样调用,代码如下:
代码
using System;
namespace ConsoleApp
{
class Program
{
public static void Main(string[] args)
{
ISalary Salary = CreateSalary("BeiJin"); //需要调用子公司的工资计算过程时, 把子公司的名称传进去
Salary.CommandSalary();
Console.ReadLine();
}
/// <summary>
/// 通过传进的公司名返回相应的实例
/// </summary>
/// <param name="CompanyName">子公司的名称</param>
/// <returns></returns>
private static ISalary CreateSalary(string CompanyName)
{
ISalary Salary = null;
if (CompanyName == "ShenZhen") //这里可以通过更多方法来判断,通过不同的名返回相应的实例
{
Salary = new ShenZhenSalary();
}
else if (CompanyName == "BeiJin")
{
Salary = new BeiJinSalary();
}
return Salary;
}
}
}
这样就可以调用计算得到各子公司的工资, 对于小型的公司, 这样的设计已经是相当的完美了, 但对于一个大公司,子公司可能有几十个更甚至几百个, 这样在CreateSalary中就需要更多的if来判断了, 这显然对维护是极为不好的, 那需要怎样设计呢?这就是所要讨论到的设计模式了, 下面接着的文章就会是常用的工厂模式来编写这个模块。
注:这是一个新手常用的写法,这还没讲到工厂模式,这里只是说这样写的类不好,不符合系统的设计模式, 先举个反例, 后面将会介绍设计模式。有些朋友没看清楚, 标注一下。
(注:这是个人学习过程的心得,可能存在极大的错误,请大家指正)
[/导读]
平时在园子里看到有人质疑, 简单工厂模式到底是怎样设计的呢? 下面就来介绍一下它的含义。
简单的工厂模式,是属于创建型的模式, 创建型模式简单的理解就会创建对象并返回相应的实例。所以它关注的是谁创建它,它是怎样被创建的,以及何时创建这些方面给予你很大的灵活性。 具体的含义, 资料上是这样介绍: 简单工厂模式又叫静态工厂方法模式, 它定义一个具体的工厂类来负责创建一些类的实例。 也就是说, 这个类集合了部分功能类似或近似类的实例化, 例如子公司工资计算的类, 不管是那个子公司(因为子公司计算类都继承了ISalary接口, 所以有前面的相似或近似的特征), 要实例化时,都通过一个类来完成, 这类就是一个工厂类。 下面一起来看一下简单工厂模式是怎样创建工资计算模块的。
下面看看代码, 先创建接口,定义其方法:
using System;
namespace ConsoleApp
{
public interface ISalary
{
void CommandSalary();
}
}
二个子公司计算的类:
代码
using System;
namespace ConsoleApp
{
public class ShenZhenSalary : ISalary
{
public void CommandSalary()
{
Console.WriteLine("这是深圳子公司的工资计算模块");
}
}
}
本站所有文章欢迎任何形式的转载,但请注明作者及出处,尊重他人劳动成果!
文章转载自:中国研发网 [http://www.yanfaw.com]
本文标题:设计模式实践之从工厂模式到创建模式整体源码分析
文章转载自:中国研发网 [http://www.yanfaw.com]
本文标题:设计模式实践之从工厂模式到创建模式整体源码分析










