[导读]
[设计模式整理笔记 一] 基础知识
[设计模式整理笔记 二] 简单工厂模式(Simple Factory)
[设计模式整理笔记 三] 工厂模式(Factory)
[设计模式整理笔记 四] 抽象工厂模式(Abstract Factory)
[设计模式整理笔记 五] 创建者模式(Builder)
[设计模式整理笔记 六] 工厂模式与创建者模式总结
[设计模式整理笔记 七] 原型模式(ProtoType)
[设计模式整理笔记 八] 单例模式(Singleton)
[设计模式整理笔记 九] 外观模式(Facade)
....后续, 包括部分例子
[/导读]
在简单工厂模式里面,我们只需编写一个工厂类专门来实例化你需要的类。在工厂模式中, 我们系统中有几个不同的产品, 我们就写几个对应的工厂类来进行生产,等于现在的车间, 不是车间实例化不同的类, 就是某些产品极为相近,都需要写二个工厂类来生产并返回你需要的类。抽象工厂模式中,我们会把一系列相似的产品放在一个工厂类里面实例化,和现在车间的流水线差不多,一个流水线负责生产相似的产品, 不同的产品需要另一条流水线来生产。工厂模式是针对细微的产品来创工厂类, 像个人实得工资计算过程中, 还需要计算税, 基金等操作, 如果用工厂模式来设计,那会变得好复杂, 那么怎样才能设计出更好的方式来处理这个问题呢? 下面就用创建者模式来介绍,具体介绍深圳子公司计算的全过程:
既然是深圳子公司,那就先创建这个子公司的类先:
namespace ConsoleApp
{
public class ShenZhenCompany
{
public virtual void CommandSalary()
{
Console.WriteLine("这是深圳子公司系统计算的结果");
}
}
}
既然要进行三个流程的计算,下面定义三个计算的类, 分别是工资,税,基金:
工资部分:
namespace ConsoleApp
{
public interface ISalary
{
void CommandSalary();
}
}
//定义类
namespace ConsoleApp
{
public class ShenZhenSalary : ISalary
{
public virtual void CommandSalary()
{
Console.WriteLine("这是深圳子公司的工资计算模块");
}
}
}
税定义如下:
namespace ConsoleApp
{
public interface ITax
{
void CommandTax();
}
}
//定义类
namespace ConsoleApp
{
public class ShenZhenTax: ITax
{
public void CommandTax()
{
Console.WriteLine("这是深圳子公司的扣税计算模块");
}
}
}
基金定义如下:
namespace ConsoleApp
{
public interface IFund
{
void CommandFund();
}
}
//定义类
namespace ConsoleApp
{
public class ShenZhenFund : IFund
{
public void CommandFund()
{
Console.WriteLine("这是深圳子公司的基金计算模块");
}
}
}
到这里基本上的类都定义完成, 一般的时候, 我们需要用时直接实例化就可以了, 然而你知道设计一个好的调用方法会帮助日后更好维护,相信也不会要用的时候直接实例化一个对象了。先定义一个抽象工厂类(IFactory)
{
public interface IFactory
{
ISalary CreateSalary();
ITax CreateTax();
IFund CreateFund();
}
那现在就可以创建一个类, 这个是派生于IFactory的, 我定义其名为ShenZhenFactory,在这个类里面, 是返回三个操作流程的类:
{
public class ShenZhenFactory : IFactory
{
public ISalary CreateSalary()
{
return new ShenZhenSalary();
}
public ITax CreateTax()
{
return new ShenZhenTax();
}
public IFund CreateFund()
{
return new ShenZhenFund();
}
}
}
到这里你就知道这个类的作用了吧, 每一个对应的方法返回对应的类, 那么我们只需要再创建一个类的对他们进行组装就可以了。客户端不需要再需要各种过程,所有的过程都封装在相应的类里面,职责十分明了。
{
public class Director
{
private IFactory Factory;
public Director(IFactory Factory)
{
this.Factory = Factory;
}
public ShenZhenCompany AssembleShenZhenCompany()
{
ISalary Salary = Factory.CreateSalary();
Salary.CommandSalary(); //工资计算
ITax Tax = Factory.CreateTax();
Tax.CommandTax(); //税计算
IFund Fund = Factory.CreateFund();
Fund.CommandFund(); //计算基金
return new ShenZhenCompany();
}
}
}
整个流程都在我们的掌控之中了, 下面就是调用了,代码如下:
{
class Program
{
public static void Main(string[] args)
{
Director MyDirector = new Director(new ShenZhenFactory());
ShenZhenCompany SZCompany = MyDirector.AssembleShenZhenCompany();
Console.ReadLine();
}
}
}
运行就会输出:
这是深圳子公司的工资计算模块
这是深圳子公司的扣税计算模块
这是深圳子公司的基金计算模块
到这里为止, 一个完整的流程出来了, 当然你可以按工资计算模块那样, 用工厂模式把扣税或基金模块的代码也写出来,当练习一下, 现在知道什么时候应该用工厂模式,什么时候用创建者模式了吧! 后面一章, 会用好典型的例子来讲解一下简单工厂模式,工厂模式,抽象工厂模式,创建者模式的特点。 保证你一看完就印象深刻。