[设计模式整理笔记 三] 工厂模式(Factory)
2012-09-12 11:07
435 查看
上篇说到简单工厂模式, 就是通过一个类(工厂类)来完成一系列相似或近似类的实例化, 但有時候, 这个类的业务量特大,要频繁的创建实例,这样在性能与日后维护方面会造成困难, 下面就介绍把工厂类细分的过程, 其实也和上一篇的原理一样, 只是把各个子公司的计算单独创建一个类(工厂类)来负责,这就形成的工厂模式。为了大家更加明了, 前面相同的代码我还是一起贴上吧, 不然给人乱乱的感觉。
先创建计算接口方法:
using System;
namespace ConsoleApp
{
public interface ISalary
{
void CommandSalary();
}
}
再创建二个子公司的计算类:
代码
using System;
namespace ConsoleApp
{
public class BeiJinSalary : ISalary
{
public void CommandSalary()
{
Console.WriteLine("这是北京子公司的工资计算模块");
}
}
}
下面是深圳子公司:
代码
using System;
namespace ConsoleApp
{
public class ShenZhenSalary : ISalary
{
public void CommandSalary()
{
Console.WriteLine("这是深圳子公司的工资计算模块");
}
}
}
到这里, 基本的类已经定义好, 下面就要开始进行工厂类设计了, 首先还是定义工厂类的接口:
using System;
namespace ConsoleApp
{
public interface IFactory
{
ISalary CreateSalary();
}
}
这样就需要定义二个子公司实现的工厂类:
代码
using System;
namespace ConsoleApp
{
public class BeiJinSalaryFactory : IFactory
{
public ISalary CreateSalary()
{
return new BeiJinSalary();
}
}
}
深圳子公司的工厂类:
代码
using System;
namespace ConsoleApp
{
public class ShenZhenSalaryFactory : IFactory
{
public ISalary CreateSalary()
{
return new ShenZhenSalary();
}
}
}
调用时代码实现如下,先实例化工厂类, 然后通过工厂类来返回相应的实例:
代码
using System;
namespace ConsoleApp
{
class Program
{
public static void Main(string[] args)
{
//调用时代码实现如下,先实例化工厂类, 然后通过工厂类来返回相应的实例:
IFactory Factory = new BeiJinSalaryFactory(); //实例化北京子公司工厂类
ISalary SalaryBJ = Factory.CreateSalary(); //创建北京子公司计算模块的类
SalaryBJ.CommandSalary();
/*这里有好多其它的代码*/
Factory = new ShenZhenSalaryFactory(); //实例化深圳子公司工厂类
ISalary SalarySZ = Factory.CreateSalary(); //创建深圳子公司计算模块的类
SalarySZ.CommandSalary();
Console.ReadLine();
}
}
}
工厂模式也是一样, 都是通过一个工厂类来完成对象的实例化,但注意的是, 每一个抽象类都会单独创建一个工厂类, 当需要添加一个子公司时, 只需要增加添加部分,例如:建一个子公司的类,一个子公司的工厂类,与原先定义好其它子公司的类没什么相联,方便系统设计, 维护也简单, 修改时的代码量也相应的少了部分。但这个工厂模式,在调用的时候需要先实例化工厂类, 再通过工厂类来返回一个子公司对象类, 工序发生了变化, 当然最后结果都是一样, 但代码量增加了不少, 层次关系也复杂了, 有点像PetShop里面的设计了吧。
先创建计算接口方法:
using System;
namespace ConsoleApp
{
public interface ISalary
{
void CommandSalary();
}
}
再创建二个子公司的计算类:
代码
using System;
namespace ConsoleApp
{
public class BeiJinSalary : ISalary
{
public void CommandSalary()
{
Console.WriteLine("这是北京子公司的工资计算模块");
}
}
}
下面是深圳子公司:
代码
using System;
namespace ConsoleApp
{
public class ShenZhenSalary : ISalary
{
public void CommandSalary()
{
Console.WriteLine("这是深圳子公司的工资计算模块");
}
}
}
到这里, 基本的类已经定义好, 下面就要开始进行工厂类设计了, 首先还是定义工厂类的接口:
using System;
namespace ConsoleApp
{
public interface IFactory
{
ISalary CreateSalary();
}
}
这样就需要定义二个子公司实现的工厂类:
代码
using System;
namespace ConsoleApp
{
public class BeiJinSalaryFactory : IFactory
{
public ISalary CreateSalary()
{
return new BeiJinSalary();
}
}
}
深圳子公司的工厂类:
代码
using System;
namespace ConsoleApp
{
public class ShenZhenSalaryFactory : IFactory
{
public ISalary CreateSalary()
{
return new ShenZhenSalary();
}
}
}
调用时代码实现如下,先实例化工厂类, 然后通过工厂类来返回相应的实例:
代码
using System;
namespace ConsoleApp
{
class Program
{
public static void Main(string[] args)
{
//调用时代码实现如下,先实例化工厂类, 然后通过工厂类来返回相应的实例:
IFactory Factory = new BeiJinSalaryFactory(); //实例化北京子公司工厂类
ISalary SalaryBJ = Factory.CreateSalary(); //创建北京子公司计算模块的类
SalaryBJ.CommandSalary();
/*这里有好多其它的代码*/
Factory = new ShenZhenSalaryFactory(); //实例化深圳子公司工厂类
ISalary SalarySZ = Factory.CreateSalary(); //创建深圳子公司计算模块的类
SalarySZ.CommandSalary();
Console.ReadLine();
}
}
}
工厂模式也是一样, 都是通过一个工厂类来完成对象的实例化,但注意的是, 每一个抽象类都会单独创建一个工厂类, 当需要添加一个子公司时, 只需要增加添加部分,例如:建一个子公司的类,一个子公司的工厂类,与原先定义好其它子公司的类没什么相联,方便系统设计, 维护也简单, 修改时的代码量也相应的少了部分。但这个工厂模式,在调用的时候需要先实例化工厂类, 再通过工厂类来返回一个子公司对象类, 工序发生了变化, 当然最后结果都是一样, 但代码量增加了不少, 层次关系也复杂了, 有点像PetShop里面的设计了吧。
相关文章推荐
- [设计模式整理笔记 三] 工厂模式(Factory)
- 【设计模式】学习笔记4:简单工厂模式(Simple Factory)
- [设计模式学习笔记二][创建型模式][工厂方法(Factory Method)]
- 设计模式笔记之工厂模式--简单工厂模式(Simple Factory Pattern)
- 设计模式学习笔记四:工厂方法(Factory Method)
- 设计模式学习笔记--工厂(Factory)、建造(Builder)和原型(Prototype)
- 设计模式学习笔记(四)之工厂模式(Factory)
- 设计模式学习笔记——工厂(Factory)模式
- 咕泡-工厂 Factory设计模式笔记
- 设计模式学习笔记(四)之工厂模式(Factory)
- [设计模式整理笔记 二] 简单工厂模式(Simple Factory)
- 设计模式学习笔记:factory method(工厂方法)
- 【设计模式】学习笔记5:工厂模式(Factory Method)
- 设计模式笔记5:工厂模式(Factory Method Pattern)
- 设计模式学习笔记三:简单工厂(Simple Factory)
- 设计模式笔记之工厂模式--工厂方法模式(Factory Method)
- 设计模式学习笔记——简单工厂(Simple Factory)
- 设计模式学习笔记三:简单工厂(Simple Factory)
- java 设计模式学习笔记二 工厂模式Factory
- 设计模式学习笔记——工厂方法(Factory Method)