创建型模式之 工厂、简单工厂、抽象工厂 简单图析和代码分析 笔记

简单工厂 、工厂方法模式和抽象工厂模式 简单工厂、工厂方法:侧重单个产品的创建。例如,创建 “手机” 这一产品,简单工厂通过条件判断决定具体手机类型,工厂方法通过子类工厂创建特定手机。抽象工厂:同样是创建型设计模式,聚焦 “产品族” 的创建,一个工厂类负责创建一组相关产品(如手机、耳机、充电器组成的电子产品族)。工厂方法:是标准的创建型设计模式,定义抽象创建接口,由子类决定实例化哪个具体产品类,强调 “单一产品” 的灵活创建。工厂方法:扩展性好。新增产品时,只需定义新的产品类和对应的工厂子类,无需修改原有工厂代码,完全符合开闭原则。 阅读详情

资料来源:吕震宇老师博客

简单工厂:

using System;

public abstract class Light
{
   public abstract void TurnOn();
   public abstract void TurnOff();
}

public class BulbLight : Light
{
   public override void TurnOn()
   {
      Console.WriteLine("Bulb Light is Turned on");
   }

   public override void TurnOff()
   {
      Console.WriteLine("Bulb Light is Turned off");
   }
}

public class TubeLight : Light
{
   public override void TurnOn()
   {
      Console.WriteLine("Tube Light is Turned on");
   }

   public override void TurnOff()
   {
      Console.WriteLine("Tube Light is Turned off");
   }
}

public class LightSimpleFactory
{
   public Light Create(string LightType)
   {
      if(LightType == "Bulb")
         return new BulbLight();//“基类返回类型多么写意啊  ”!!! 
      else if(LightType == "Tube")
         return new TubeLight();
      else
         return null;
   }
}

public class Client
{
   public static void Main()
   {
      LightSimpleFactory lsf = new LightSimpleFactory();

      Light l = lsf.Create("Bulb");//这里是核心,“基类无敌了,把子类方法使唤”!! 
      l.TurnOn();
      l.TurnOff();

      Console.WriteLine("-----------------");

      l = lsf.Create("Tube");
      l.TurnOn();
      l.TurnOff();
   }
}


简单工厂图例:

分析:两个具体产品出自于抽象产品,而具体产品的生产直接交给一个具体的工厂去完成。优点是:客户不用知道产品具体是怎么生产的,直接交给工厂即可。

缺点是:当要扩展生产其他产品的时候,具体工厂就显得臃肿复杂了,而且还要修改。

 

 

 

 

 

工厂模式:

program:

using System;

public abstract   class Light
{
   public abstract void TurnOn();
   public abstract void TurnOff();
}

public class BulbLight : Light
{
   public override void TurnOn()
   { Console.WriteLine("Bulb Light is Turned on"); }

   public override void TurnOff()
   { Console.WriteLine("Bulb Light is Turned off"); }
}

public class TubeLight : Light
{
   public override void TurnOn()
   { Console.WriteLine("Tube Light is Turned on"); }

   public override void TurnOff()
   { Console.WriteLine("Tube Light is Turned off"); }
}

public abstract   class Creator//这个抽象工厂是亮点 
{
   public abstract Light factory();
}

public class BulbCreator : Creator//对客户的要求进行松耦合,说白些就是对每一个客户我就大方的分配一个工厂帮你搞产品外包 
{
   public override Light factory()
   { return new BulbLight(); }
}

public class TubeCreator : Creator
{
   public override Light factory()
   { return new TubeLight(); }
}

public class Client
{
   public static void Main()
   {
      Creator c1 = new BulbCreator();//客户知道总公司是谁,且知道自己一直合作的分工厂是谁,就找到谁 
      Creator c2 = new TubeCreator();

      Light l1 = c1.factory();//客户知道自己的产品分类的科目,这个是具体运行了 
      Light l2 = c2.factory();

      l1.TurnOn();
      l1.TurnOff();

      Console.WriteLine("-----------------");

      l2.TurnOn();
      l2.TurnOff();
   }
}


 

工厂模式图例:

简单分析:工厂模式的优点是:把工厂的负担减小了,同时使得分工更加明显。

缺点:囧。上课没记住~~~

 

 

 

 

抽象工厂模式:

program:

// Abstract Factory pattern -- Structural example  
using System;

// "AbstractFactory"
abstract class AbstractFactory//抽象工厂 
{
  // Methods
  abstract public AbstractProductA CreateProductA();//具体工厂具体方法,方法可以是组合,使得业务逻辑更符合常识 
  abstract public AbstractProductB CreateProductB();
}

// "ConcreteFactory1"
class ConcreteFactory1 : AbstractFactory//工厂1:生产产品A1和产品B1 
{
  // Methods
  override public AbstractProductA CreateProductA()
  {
    return new ProductA1();
  }
  override public AbstractProductB CreateProductB()
  {
    return new ProductB1();
  }
}

// "ConcreteFactory2"
class ConcreteFactory2 : AbstractFactory//产品2:生产产品A2和B2 
{
  // Methods
  override public AbstractProductA CreateProductA()
  {
    return new ProductA2();
  }

  override public AbstractProductB CreateProductB()
  {
    return new ProductB2();
  }
}

// "AbstractProductA"
abstract class AbstractProductA//产品A系列的鼻祖 
{
}

// "AbstractProductB"
abstract class AbstractProductB//产品B系列的鼻祖,不过和A系列搅合在一块,“用了对象组合” 
{
  // Methods
  abstract public void Interact( AbstractProductA a );
}

// "ProductA1"
class ProductA1 : AbstractProductA//具体A系列的产品 
{
}

// "ProductB1"
class ProductB1 : AbstractProductB//具体B系列的产品,当然也把自己的组合部件A系列输出,不过输出A系列的哪个部件,这还是看具体工厂下达的命令 
{
  // Methods
  override public void Interact( AbstractProductA a )
  {
    Console.WriteLine( this + " interacts with " + a );
  }
}

// "ProductA2"
class ProductA2 : AbstractProductA
{
}

// "ProductB2"
class ProductB2 : AbstractProductB
{
  // Methods
  override public void Interact( AbstractProductA a )
  {
    Console.WriteLine( this + " interacts with " + a );
  }
}

// "Client" - the interaction environment of the products
class Environment//客户的命令在这个环境进行处理,找到相应工厂 
{
  // Fields
  private AbstractProductA AbstractProductA;
  private AbstractProductB AbstractProductB;//这个对象组合感觉太拘谨了,搞得非要生产AB一样 
   

  // Constructors
  public Environment( AbstractFactory factory )//这个工厂“基类”老大霸气侧漏! 
  {
    AbstractProductB = factory.CreateProductB();
    AbstractProductA = factory.CreateProductA();
  }
 
  // Methods
  public void Run()
  {
    AbstractProductB.Interact( AbstractProductA );
  }
}

/// <summary>
/// ClientApp test environment
/// </summary>
class ClientApp
{
  public static void Main(string[] args)
  {
    AbstractFactory factory1 = new ConcreteFactory1();
    Environment e1 = new Environment( factory1 );//客户想工厂1发出命令 
    e1.Run();

    AbstractFactory factory2 = new ConcreteFactory2();
    Environment e2 = new Environment( factory2 );
    e2.Run();
  }
}


 

抽象工厂图例:

 

简单分析:优点:抽象工厂真的把二维的感觉说出来了

设计模式之简单工厂模式和抽象工厂模式 目录 1简单工厂模式 1.1组成 1.2简单例子 1.2.1 抽象产品角色 1.2.2具体产品角色 1.2.3 工厂类角色 1.2.4 顾客测试类 1.3 优缺点 1.3.1 优点 1.3.2 缺点 2抽象工厂模式 2.1模式的定义与特点 2.2模式的结构与实现 2.2.1模式的结构 2.2.2 案例实现 前面说到有三种工厂模式: 简单工厂模式(Simple Factory) 工厂方法模式(Factory Method) 抽象工厂模式(Abstract... 阅读详情

相关推荐

Android Profiler 帧率优化实战与性能调优

本文详细介绍了使用Android Profiler进行帧率优化与性能调优的实战方法。通过分析主线程状态、FPS曲线和渲染阶段耗时,精准定位卡顿根源,并提供减少过度绘制、优化绘制命令及改善资源使用的具体策略。文章结合电商、游戏等真实案例,帮助开发者有效解决卡顿问题,提升应用流畅度。

palm99的专栏 537

模式二(工厂方法模式)

工厂方法模式是类的创建模式,其用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。 抽象工厂角色:任何在模式中创建的对象的工厂类必须实现这个接口。具体工厂角色:这是实现抽象工厂接口的具体工厂类。抽象产品角色:工厂方法模式所创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接口。具体产品角色:这个角色实现了抽象产品角色所定义的接口。using System;using System.Collections.Generic;using System.Text;namespace Simple

mozhan的专栏 407

SAP-ML章<<<<第二节:物料账报错处理ABAP编程错误:RAISE_EXCEPTION>>>>

#SAP-ML章<<<<第一节:物料账报错处理ABAP编程错误:RAISE_EXCEPTION>>>> 1.物料账报错提示: ABAP编程错误:RAISE_EXCEPTION ABAP程序:SAPLFCML4H_RUN_PRICES应用组件CO-PC-ACT 2. 物料账报错背景: CKMLCP运行结算时 3. 解决方案: 通过DEBUG查看错误的地方 OKTZ:分析原因为:可能打包或者配置传输时弄错 ...

SAP.David.Gao的博客 1858

简单工厂模式、工厂模式与抽象工厂模式详解

设计模式是一套被反复使用、多数人认可的、经过分类编目的、代码设计经验的总结。它们为软件设计提供了一定的指导和最佳实践。特别是在创建对象时,简单工厂、工厂模式和抽象工厂模式这三种创建型模式经常被提及和应用。简单工厂模式是一种创建型设计模式,它通过一个单一的工厂类来负责创建一系列相关的对象。这个工厂类根据传入的参数来决定实例化哪一个具体类的实例。客户端在使用时不需要知道具体的类名,只需要提供必要的信息给工厂。工厂模式属于创建型模式,它在创建对象时提供了一种封装机制,将实际创建对象的代码与使用代码分离。

2302_77758423的博客 3878

PLC编程标准之争:IEC61131与IEC61499核心区别与选型指南

在工业自动化领域,PLC编程长期依赖IEC61131标准,它定义了梯形图、结构化文本等语言,通过周期扫描机制保证确定性执行。然而,随着工业4.0和分布式控制场景的兴起,IEC61499以事件驱动模型打破传统范式,让功能块能跨设备协同,实现更灵活的柔性产线和模块化系统。理解两者在程序结构、数据交互、部署方式和实时性上的差异,是选型与工程落地的关键。本文从基础概念出发,剖析执行模型与架构演进,结合一线调试经验,帮助工程师在传统PLC与下一代标准之间做出理性决策。

weixin_27014595的博客 270

编译原理实验二:LL(1)分析法(附C/C++完整代码)

本文讲述了LL(1)文法的原理及如何用C语言实现。并在给出的代码中实现了消除文法的左递归,First集,Follow集,select集的输出,构造预测分析表并输出,和对任意输入字符串的分析。程序总流程为:从文件读取文法 -> 输出文法信息 -> 消除左递归并输出消除后的文法 -> 计算First集并输出 -> 计算Follow集并输出 ->计算select集并输出 -> 判断是否是LL(1)文法 -> 构造预测分析表并输出 ->手动输入要分析的字符串 -> 输出分析过程和结果读取文件。

W_Wmwmwm的博客 6193

设计模式-工厂模式(简单工厂、工厂方法、抽象工厂)

不会工厂模式怎么进大厂? 文章目录 简单工厂 工厂方法 抽象工厂 使用抽象工厂模式,设计一个monopoly游戏地图,地图由十二个地块组成,地块可能是:空地、游乐园和监狱。也可能是由魔法地块组成,每个地块可能是:魔法空地、魔法游乐园和魔法监狱。 请用控制台输出。输出的格式可以像表格这样,*代表是空地,#代表是游乐园,&代表监狱。e代表是魔法空地,g代表是魔法游乐园,p代表魔法监狱(表格线只是为了控制符号位置,不需要输出)

有一分热,发一分光。 6815

【Office激活】学校正版Office已激活成功仍弹出激活窗口

学校正版Office激活问题:已激活成功仍弹出激活窗口

ESCM_的博客 1万+

【设计模式】Unity3D 简单工厂、工厂(方法)、抽象工厂模式

unity3d实现简单工厂模式,工厂模式和抽象工厂模式,以及其优缺点和适用场景

qq_36674053的博客 4408

实战篇(一):从零构建领域知识图谱——基于Protege的本体建模与知识表示

本文详细介绍了如何从零构建领域知识图谱,重点讲解了基于Protege的本体建模与知识表示方法。通过游戏和电影领域的实战案例,展示了类层次结构设计、属性关系定义、推理验证等关键步骤,帮助读者掌握知识图谱构建的核心技术。

weixin_42613501的博客 482

MinIO vs 华为云OBS:成本、性能与兼容性深度对比(含实测数据)

本文深度对比了开源对象存储MinIO与华为云OBS在成本、性能、兼容性及运维方面的核心差异。通过实测数据与全生命周期成本分析,为技术决策者提供选型依据。文章指出,MinIO在长期成本控制、性能深度优化及S3 API兼容性方面优势显著,而华为云OBS则提供开箱即用的便利性。

kmeans3miner的博客 595

C++设计模式创建型模式———简单工厂模式、工厂方法模式、抽象工厂模式

简单工厂、工厂方法和抽象工厂是三种常见的创建型设计模式,它们各自有不同的特点和应用场景。代码实现复杂度上,简单工厂模式最简单,工厂方法模式次之,抽象工厂模式最复杂。简单工厂模式中的代码修改得符合开闭原则,就变成了工厂方法模式,修改工厂方法模式的代码使一个工厂支持对多个具体产品的生产,就变成了抽象工厂模式。从需要的工厂数量上。

无敌岩雀的博客 2015

LIO-SAM运行报错‘process has died’?别慌,一个命令搞定libmetis.so库路径问题

本文详细解析了LIO-SAM运行中常见的‘process has died’报错问题,特别是由libmetis.so库路径错误导致的节点崩溃。通过一个简单的命令移动库文件到正确位置,即可快速解决这一问题,同时提供了多种替代方案和预防措施,帮助开发者更好地理解Linux动态库加载机制和ROS环境管理。

weixin_29231221的博客 206

简单工厂、工厂方法、抽象工厂的区别

简单工厂模式(Simple Factory Pattern)简单工厂模式又称静态工厂方法模式,是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。简单工厂模式的核心思想就是有一个专门的类来负责创建实例的过程。工厂角色(Factory Role):是简单工厂模式的核心,负责创建所有的类的内部逻辑。工厂类必须能够被外界调用,创建所需要的产品对象。抽象产品角色(Abstract Product Role)

huaqianzkh的专栏 1911

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

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

蓝牙模块HM-10手册

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

深入解析工厂模式:简单工厂、工厂方法与抽象工厂

深入解析工厂模式:简单工厂、工厂方法与抽象工厂

weixin_74232595的博客 1617

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【设计模式】创建型模式(二):抽象工厂模式

抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

Data · Model · Agent · Repeat 1557

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

设计模式创建型——抽象工厂模式

抽象工厂模式(Abstract Factory Pattern)隶属于设计模式中的创建型模式,用于产品族的构建。抽象工厂是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂是指当有多个抽象角色时使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体情况下,创建多个产品族中的产品对象。

tszc95的博客 9863

简单工厂、工厂模式、抽象工厂的区别

抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。简单工厂: 通过一个静态方法,根据参数决定创建哪种具体对象。适用于对象种类较少,变化不频繁的情况。工厂方法: 通过子类实现工厂方法,创建具体对象。适用于对象种类较多,且需要灵活扩展的情况。抽象工厂: 提供一个接口,用于创建一系列相关或依赖的对象。适用于需要一组相关或依赖对象的情况,确保产品族的一致性。

qq_43287763的博客 1115

设计模式学习笔记(三)工厂模式中的简单工厂、工厂方法和抽象工厂模式之间的区别

设计模式中的工厂模式(Factory Design pattern)是一个比较常用的创建型设计模式,其中可以细分为三种:简单工厂(Simple Factory)、工厂方法(Factory Method)和抽象工厂(Abstract Factory)。那么三者有什么区别呢?先说结论: 简单工厂:只有唯一工厂(简单工厂),一个产品接口/抽象类,根据简单工厂中的静态方法来创建具体产品对象。适用于产品较少,几乎不扩展的情景 工厂方法:有多个工厂(抽象工厂+多个具体工厂),一个产品接口/抽象类,根据继承抽象工厂中的

hello_1566的博客 2906

三大工厂模式(简单工厂、工厂方法、抽象工厂)

设计模式之三大工厂模式介绍,有案例代码说明

hahahahanhanhan的博客 3592

创建型模式——抽象工厂模式

创建型模式——抽象工厂模式 (一)简述 抽象工厂模式是一个超级工厂,用来创建其他工厂,这个工厂也被称为工厂的工厂。 这种类型的设计模式属于创建模式,因为此模式提供了创建对象的最佳方法之一。在抽象工厂模式中,接口负责创建相关对象的工厂,而不明确指定它们的类。 每个生成的工厂可以按照工厂模式提供对象。 (二)特点 抽象工厂模式是工厂方法模式的孪生兄弟。工厂方法模式中考虑的是一类产品的生产,如畜牧场只养动物、电视机厂只生产电视机等。我们可以把同种类称为同等级,也就是说:工厂方法模式只考虑生产同等级的产品,但是在

物是人非,结局始终不美 7175

设计模式之简单工厂模式、工厂模式和抽象工厂模式

简单工厂模式、工厂模式和抽象工厂模式 1. 简单工厂模式 简单工厂模式属于创建型模式,是工厂模式的一种。简单工厂模式定义了一个创建对象的类,由这个类来封装实例化对象的行为。它是由一个工厂对象决定创建出哪一种产品类的实例。 简单工厂模式是工厂模式中最简单使用的模式。 简单工厂模式的三个角色 Factory(工厂角色) :简单工厂模式的核心,它负责实现创建所有实例的内部逻辑,根据调用时传入的参数,从而创建不同的对象。 Product(抽象产品角色) :简单工厂模式中所创建所有对象的父类,负责描述所以产品

JustToFaith 2169

【创建型模式】抽象工厂模式

抽象工厂模式定义提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。模式动机1.当系统提供的工厂生产的具体产品并不是一个简单的对象,而是多个位于不同产品等级结构、属于不同类型的具体产品时就可以使用抽象工厂模式;2.抽象工厂模式是所有形式的工厂模式中最为抽象和最具一般性的一种形式。抽象工厂:一个工厂可以生产一系列(一族产品),极大减少了工厂类的数量。又叫做工具模式:抽象工厂模式中的具体工厂不只是创建一种产品,她负责一族产品;

Emily的博客 1174

创建型模式-抽象工厂模式

抽象工厂模式是一种创建型设计模式,它提供了一种方式来创建一系列相关或相互依赖的对象,而无需指定具体类。它通过定义一个抽象工厂接口和一组具体工厂实现类来实现对象的创建。抽象工厂模式的核心思想是将对象的创建与使用分离。客户端通过调用抽象工厂接口来创建对象,而具体对象的创建逻辑被封装在具体工厂类中。这样做的好处是可以轻松地替换具体工厂类,从而实现不同的对象创建逻辑。当需要创建一系列相关或相互依赖的对象时,可以使用抽象工厂模式来封装对象的创建逻辑,从而避免代码重复。

Flying_Fish_roe的博客 1330

【设计模式】创建型模式——抽象工厂模式

抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,属于对象创建型模式。这些类实现了抽象产品接口。// WindowsButton 是 Windows 风格的按钮// MacButton 是 Mac 风格的按钮// WindowsTextBox 是 Windows 风格的文本框// MacTextBox 是 Mac 风格的文本框声明了创建一组相关对象的方法。

小哎呀的博客 1391

设计模式--抽象工厂模式【创建型模式】

抽象工厂模式是一种创建型模式,该模式提供了一个超级工厂(抽象工厂),其他工厂来是实现这个工厂接口,同时还有一个工厂创建类,通过传入不同的参数,来创建不同的工厂,抽象工厂 模式是对工厂模式的扩展,工厂模式只是某类产品的工厂,而抽象工厂则是多类产品的工厂,可以理解为一类产品(产品族)的工厂,而抽象工厂就是工厂的工厂,是一个超级工厂。产品族。

weixin_42118323的博客 1378
上一篇: Pots
下一篇: 结构型模式之 类的适配器、对象适配器 笔记
muximuxi525
博客等级 码龄15年 134粉丝 294原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值