[设计模式整理笔记 三] 工厂模式(Factory)

上篇说到简单工厂模式, 就是通过一个类(工厂类)来完成一系列相似或近似类的实例化, 但有時候, 这个类的业务量特大,要频繁的创建实例,这样在性能与日后维护方面会造成困难, 下面就介绍把工厂类细分的过程, 其实也和上一篇的原理一样, 只是把各个子公司的计算单独创建一个类(工厂类)来负责,这就形成的工厂模式。为了大家更加明了, 前面相同的代码我还是一起贴上吧, 不然给人乱乱的感觉。

先创建计算接口方法:

复制代码
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里面的设计了吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值