.NET实用设计模式:工厂模式(Factory)

.NET高级面试指南专题十二【 工厂模式介绍,工厂模式和抽象工厂模式的区别】 工厂模式是一种常用的创建型设计模式,它提供了一种创建对象的最佳方式,同时隐藏了创建对象的复杂性。抽象工厂模式通过引入一个抽象工厂接口和多个具体工厂类来实现,每个具体工厂类负责创建一组相关的产品,这些产品通常在逻辑上属于同一个产品族或者具有相关特性。在抽象工厂模式中,客户端通过与具体工厂的接口交互来创建产品,而不是直接实例化具体产品。工厂模式包含一个工厂类,该类负责创建其他类的对象。总之,工厂模式更注重单一对象的创建,而抽象工厂模式更注重一组相关对象的创建,它们各自的设计目标和使用场景不同。 阅读详情

从http://www.cnblogs.com/lane_cn/articles/70742.html转载

设计模式从本质上说是一种规则,从形式上说,分为创建型、结构型、行为型。

设计模式的应用是为了实现软件设计中的几个原则,其中一个重要原则是:减少模块之间的耦合程度。为了确保这个目的,在设计一个类时,要针对接口,而非实现。(Programming to an Interface, not an Implementation)设计的时候只关心类的接口,编程的时候可以先实现一个简单的接口,供别的模块调用。使用一个类的时候只对接口工作,不关心具体的实现,也不关心具体的类型。这样也符合人类认识世界的规律,一般说来人们总是先了解一个事情的大概情况,比如,我们先了解一台电视机的大概功能,然后才能了解每个功能具体是怎样实现的。

开始的时候不提供实现,正是为了以后能够最大限度的实现。

设计模式不受语言的限制,使用.net或者java更容易实现。

工厂模式(Factory)

工厂模式属于一种创建型模式(Creational)。同样属于创建型模式的还有单件模式(Singleton),以后有机会再说。

    工厂模式的要点:

    1:存在一个创建对象的工厂;

    2:调用者从工厂中取得某些对象;

    3:由工厂决定如何创建对象;

    4:客户不知道对象是如何生成的。

举一个例子,下面的类视图:



Namer对象是FirstFirst和LastFirst的基类,用户调用Namer类的时候,不直接new出Namer类或者他的子类,而是使用NameFactory的getName方法得到具体的对象。这样在用户就不用关心自己正在使用的是哪一个Namer,正在调用哪一个方法。用户只针对Namer进行工作,而不用关心具体的类型。在实际工程中可以将Namer类的子类的构造函数只对NameFactory开放,进一步限制程序员。

C#代码如下:

1:Namer的实现


using  System;

namespace  NameFactory
{
    
/// <summary>
    
/// Summary description for Namer.
    
/// </summary>

    //Base class for getting split names
    public class Namer {
        
//parts stored here
        protected string frName, lName;
 
         
//return first name
        public string getFrname(){
            
return frName;
        }


        
//return last name
        public string getLname() {
            
return lName;
        }

    }

}


2:FirstFirst类的实现

using  System;

namespace  NameFactory
{
    
/// <summary>
    
/// Summary description for FirstFirst.
    
/// </summary>

    public class FirstFirst : Namer
    
{
        
public FirstFirst(string name)
        
{
            
int i = name.IndexOf (" ");
            
if(i > 0) {
                frName 
= name.Substring (0, i).Trim ();
                lName 
= name.Substring (i + 1).Trim ();
            }

            
else {
                lName 
= name;
                frName 
= "";
            }

        }

    }

}


3:LastFirst类的实现

using  System;

namespace  NameFactory
{
    
/// <summary>
    
/// Summary description for LastFirst.
    
/// </summary>

    public class LastFirst : Namer
    
{
        
public LastFirst(string name) {
            
int i = name.IndexOf (",");
            
if(i > 0) {
                lName 
= name.Substring (0, i);
                frName 
= name.Substring (i + 1).Trim ();
            }

            
else {
                lName 
= name;
                frName 
= "";
            }

        }

    }

}


4:NameFactory,工厂的实现

using  System;

namespace  NameFactory
{
    
/// <summary>
    
/// Summary description for NameFactory.
    
/// </summary>

    public class NameFactory {

        
public NameFactory() {}
        
public Namer getName(string name) {
            
int i = name.IndexOf (",");
            
if(i > 0)
                
return new LastFirst (name);
            
else
                
return new FirstFirst (name);
        }

    }

}


5:调用者,一个窗体,如图:



按钮的响应事件代码如下:

private   void  btCompute_Click( object  sender, System.EventArgs e)  {
    Namer nm 
= nameFact.getName (txName.Text );
    txFirst.Text 
= nm.getFrname ();
    txLast.Text 
= nm.getLname ();
}


程序并不复杂,运行不运行无所谓,关键是要搞清楚Factory所起的作用:他隐藏了Namer类的创建细节,调用者始终不知道他创建的是哪一个类,也不需要关心他调用的方法是哪一个子类的。如果以后的程序的需求发生改动,比如:某国的人不仅有First Name和Last Name,还有Mid Name,就可以很方便的进行扩充,添加一个Namer的子类,修改一下Factory。调用者甚至不知道有新加了一种Namer的类型。

实际的应用

举一个简单的例子:工程中需要使用多种数据库,Oracle、SQL Server、Sybase,为这些数据库建立了各自的连接和查询操作的类,这些类有一个共同的基类BaseConn。可以建立一个ConnFactory类,用于根据不同情况产生具体的类。调用者不必关心自己调用的是谁。大大简化了业务代码。

实际的使用例子还有很多。
.NET 设计模式—工厂方法模式(Factory Method Pattern) 工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定将哪一个类实例化。这种模式使得对象的创建延迟到子类,从而实现了对扩展开放、对修改关闭的原则。工厂方法模式又简称为工厂模式(Factory Pattern),又可称作虚拟构造器模式(Virtual Constructor Pattern)或多态工厂模式(Polymorphic Factory Pattern)。工厂方法模式是一种类创建型模式。 阅读详情

相关推荐

【愚公系列】二十三种设计模式(零)-简单工厂模式(Simple Factory Pattern)

设计模式(Design Pattern)是软件开发领域的宝贵经验,是多人反复借鉴和广泛应用的代码设计指导。它们是一系列经过分类和归纳的代码组织方法,旨在实现可重用性、可维护性和可理解性。使用设计模式,我们能够编写高质量的代码,使其更易于他人理解,并提供了代码可靠性的保证。毫无疑问,设计模式对个人、团队和整个系统都带来了显著的益处。它们将代码开发提升到工程化水平,为软件工程构建提供了坚实的基础,就如同大厦的一块块精巧的砖石一样。在项目中明智地应用设计模式可以完美地解决各种复杂问题。

愚公智库 47万+

java实现常见的三种工厂模式

①抽象产品A B②定义具体产品A1 A2 B1 B2③抽象工厂④定义具体工厂1 2⑤示例使用每种模式都有不同的应用场景和特点,可以根据具体需求选择适合的工厂模式来创建对象。

qq_36382892的博客 1138

.Net 设计模式进阶之路——工厂方法模式[Factory Method]

「本文是月更第2天文章。对我来说,这是一个挑战,虽然很早就读过设计模式,但已经还回给了书本,这次拿来无非是想挑战下自己的输出能力,加油,webmote」 ????欢迎点赞 :???? 收藏 ⭐留言 ???? 如有错误敬请指正,赐人玫瑰,手留余香! ????本文作者:由webmote 原创 ????作者格言: 生活在于折腾,当你不折腾生活时,生活就开始折腾你,让我们一起加油!???????????? ???? 序言 模式: 模式这个词,可以理解为套路,很像程咬金的三板斧,按照这个套路就可以搞定某件事。

网尘的技术专栏 889

.NET中的设计模式一:工厂模式

 设计模式概述设计模式从本质上说是一种规则,从形式上说,分为创建型、结构型、行为型。设计模式的应用是为了实现软件设计中的几个原则,其中一个重要原则是:减少模块之间的耦合程度。为了确保这个目的,在设计一个类时,要针对接口,而非实现。(Programming to an Interface, not an Implementation)设计的时候只关心类的接口,编程的时候可以先实现一个简单的接

1545

【Qt串口调试助手】1.1 - Qt5编写串口调试助手,Qt串口编程

这章来学习串口数据流操作。仿照成品制作一个自己用Qt编写的串口助手。 1. 布局UI界面 创建QWidget工程,布局UI界面:拖入2个 Plain Text Edit,作为串口数据的接收显示和发送框。 拖入几个 Combo Box 、Label 和 Push Button,使用两个Widget进行布局。如下所示。 将接收区的 Plain Text Edit,属性勾选上 readOnly,使其运行时不会被人为的输入操作影响。 加入一些弹簧,使布局美观。(有必要可以加设置不能调整..

Mark_md的博客 9272

Cadence PCB SI仿真实战:如何手动添加VIA过孔模型提升板级链路精度

本文详细介绍了在Cadence PCB SI仿真中如何手动添加VIA过孔模型以提升DDR4/5设计的精度。通过参数化建模和三维全波建模技术,工程师可以有效解决高速设计中的信号完整性问题,显著降低仿真误差。文章还提供了实战案例和常见问题解决方案,帮助优化板级链路性能。

weixin_28683391的博客 405

.Net简单工厂模式,工厂模式,抽象工厂模式实例

1.定义    简单工厂模式:是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。   工厂模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。   抽象工厂模式:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。 2.实例   用工人种蔬菜的例子来说明,蔬菜植物的产品器官有根、茎...

weixin_34266504的博客 773

项目风险管理全流程解析

按技术、资源、市场、外部环境等类型对风险进行分类,便于团队快速识别风险,提高风险管理效率,避免风险遗漏。项目结束后,总结实际发生的风险和应对效果,找出风险管理中的经验和教训,为后续项目提供参考。

qq_34062333的博客 1471

工厂方法模式

        工厂方法(Factory Method)模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。        工厂方法模式是简单工厂模式的衍生,解决了许多简单工厂模式的问题。首...

HelloKandy's Blog 748

电机控制-PMSM无感FOC控制(五)SVPWM过调制策略优化与谐波抑制

本文深入探讨了PMSM无感FOC控制中的SVPWM过调制策略优化与谐波抑制。针对电机高速运行时电压利用率不足的问题,分析了过调制技术的必要性,并详细阐述了分区过调制、谐波注入及闭环优化等主流策略,旨在提升电压利用率与抑制电流谐波,实现电机高性能控制。

convnet3designer的博客 353

Dify+MCP Server打造禅道AI智能助手

Dify AI与MCP Server结合打造的禅道AI智能助手,实现了项目管理智能化升级。该方案通过大语言模型和自动化工作流,提供四大核心功能:1)自动化报表生成,支持多维度数据统计与可视化;2)禅道系统管理操作,简化产品/项目/任务管理流程;3)基于知识库的智能问答系统;4)数据库灵活查询与可视化输出。系统采用分层架构,通过MCP协议实现AI与数据源解耦,解决了传统禅道在数据孤岛、工具碎片化等问题。实际应用验证了其在用户管理、任务创建、Bug处理等场景的高效性,显著提升了项目管理效率。

oNew_Lifeo的博客 1708

C# 设计模式——工厂模式(Factory Pattern)

工厂模式是一种创建型设计模式,它提供了一种将对象实例化过程抽象出来的方法,使代码更具灵活性和可维护性。工厂模式主要分为三种形式

2404_88212162的博客 2300

Cadence AMS数模混合仿真:从零搭建高效验证环境的实战指南

本文是Cadence AMS数模混合仿真的实战指南,详细介绍了如何从零搭建高效的芯片验证环境。内容涵盖环境准备、Testbench创建、核心Config视图与ADE设置、仿真运行调试及性能加速技巧,旨在帮助工程师解决SoC设计中数字与模拟模块的集成验证难题,确保芯片设计一次成功。

weixin_29164091的博客 320

【C#设计模式】4.工厂方法模式(Factory Method Pattern)【创建型】

随着需求的变化我们要不停地修改工厂里面的方法的代码,需求变化越多,里面的If–Else–也越多,这样就会造成简单工厂的实现逻辑过于复杂。设计模式是遵循一定原则而得来的,比如,我们要怎么增加代码,怎么修改代码,不是想怎么来就怎么来的,其中一个原则就是OCP原则,中文是【开放关闭原则】,对增加代码开发,对修改代码关闭,所以我们就不能总是这样修改简单工厂里面的方法。......

星Yeah 的博客 4227

机器学习【学校智慧食堂及其应用】

本文主要介绍机器学习【智慧食堂及其应用】

qq_201729558 2571

24届数字IC验证——SV+UVM基础知识汇总(一)

汇总整理在面试过程中常见的问题,如果都能回答下来,那么面试肯定不成问题的分别构建不同抽象级的transaction,来实现复杂的激励。(以前是单一层次的sequence,对激励复用、上层复用不塌友好)不同层级之间的sequence没有继承关系,相互之间进行转换低层次的sequence从高层次的sequencer中获取高层次的sequence,并将其转换为低层次的sequence,再通过低层次的sequencer发送出去如何连接:低层次的sequencer包含高层次sequencer的句柄。

qq_42135020的博客 3147

.NET设计模式:抽象工厂模式(Abstract Factory)

.NET设计模式:抽象工厂模式(Abstract Factory) 概述在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时由于需求的变化,往往存在着更多系列对象的创建工作。如何应对这种变化?如何绕过常规的对象的创建方法(new),提供一种“封装机制”来避免客户程序和这种“多系列具体对象创建工作”的紧耦合?这就是我们要说的抽象工厂模式。意图提供一个创建一系列相关或相

老汉--小庙和尚 1512

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

.NET 设计模式—抽象工厂模式(Abstract Factory Pattern)

抽象工厂模式(Abstract Factory Pattern): 抽象工厂模式提供一个接口,用于创建一系列相关或相互依赖的对象。客户端通过使用抽象工厂及其产品接口来创建对象,从而将客户端与具体的产品实现解耦。总体而言,简单工厂模式适用于只有一个工厂类负责创建所有产品的场景;工厂方法模式适用于每个产品对应一个具体工厂的场景;抽象工厂模式适用于需要创建一系列相关产品的场景。根据具体的需求和系统设计的复杂度,选择适合的工厂模式可以提高代码的灵活性和可维护性。

weixin_38747097的博客 2130

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

上一篇: CodeSmith 4 Release 注册破解序列号注册码方法
下一篇: .NET实用设计模式:观察者模式(Observer)
comeon_data
博客等级 码龄22年 15粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值