简单工厂模式

设计模式整理之简单工厂

你离开我真会死。 提交于 2020-01-26 05:24:01
具体实现代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 设计模式实例 { class Program { /// <summary> /// 考虑一个简单的软件应用场景,一个软件系统可以提供多个外观不同的按钮 /// (如圆形按钮、矩形按钮、菱形按钮等), 这些按钮都源自同一个基类, /// 不过在继承基类后不同的子类修改了部分属性从而使得它们可以呈现不同的外观, /// 如果我们希望在使用这些按钮时,不需要知道这些具体按钮类的名字, /// 只需要知道表示该按钮类的一个参数,并提供一个调用方便的方法, /// 把该参数传入方法即可返回一个相应的按钮对象,此时,就可以使用简单工厂模式。 /// /// </summary> /// <param name="args"></param> static void Main(string[] args) { Operation oper; Console.Write("请输入第一个数: "); string strNum1 = Console.ReadLine(); Console.Write("请输入操作符(+ - * /):

Unity C# 设计模式(二)简单工厂模式

心不动则不痛 提交于 2020-01-26 05:23:37
定义: 简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。 简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。 简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。 简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。 优点: 工厂类是整个模式的关键.包含了必要的逻辑判断,根据外界给定的信息,决定究竟应该创建哪个具体类的对象。 通过使用工厂类,外界可以从直接创建具体产品对象的尴尬局面摆脱出来,仅仅需要负责“消费”对象就可以了。 而不必管这些对象究竟如何创建及如何组织的.明确了各自的职责和权利,有利于整个软件体系结构的优化。 缺点: 由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中; 它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。 当系统中的具体产品类不断增多时候,可能会出现要求工厂类根据不同条件创建不同实例的需求. 这种对条件的判断和对具体产品类型的判断交错在一起,很难避免模块功能的蔓延,对系统的维护和扩展非常不利; 这些缺点在 工厂方法模式 中得到了一定的克服。 使用场景: 1、工厂类负责创建的对象比较少; 2

简单工厂模式-Simple Factory Pattern

僤鯓⒐⒋嵵緔 提交于 2020-01-26 05:14:43
引入: 我们在编程的时候,每当" new "一个对象之后,这个对象就依赖于这个类了。如果在后期的维护过程中由于某些原因需要修改一下这个类,则唯一的做法就是打开源代码,进行修改,修改所有与这个对象有关的操作。这对我们是非常不利的。 问题出来了:对象不能应对“具体实例化类型”的变化 解决思路:封装变化点,哪里变化,封装哪里。在这个例子中,要实例化的类变了,就将实例化这个操作封装起来,我们可以把" new "这个操作移交一个具体的类,由它去负责根据我们的条件创建具体类的实例,也就是下面要说的“简单工厂模式”。 定义: 专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类或接口。简单工厂模式又称为静态工厂方法(Static Factory Method)模式,属于类的创建型模式,通常根据一个条件(参数)来返回不同的类的实例。 意图: 提供一个类,由它负责根据一定的条件创建某一具体类的实例 参与者: 工厂角色(IPhoneSimpleFactory) 是简单工厂模式的核心,它负责实现创建所有具体产品类的实例。工厂类可以被外界直接调用,创建所需的产品对象。 抽象产品角色(IPhone) 是所有具体产品角色的父类,它负责描述所有实例所共有的公共接口。 具体产品角色(IPhone6s、IPhone7s) 继承自抽象产品角色,一般为多个,是简单工厂模式的创建目标

简单工厂模式(Simple Factory Pattern)

穿精又带淫゛_ 提交于 2020-01-26 05:13:35
意图: •专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. •(Simple Factory)模式又称为静态工厂方法(Static Factory Method)模式,属于类的创建型模式,通常他根据自变量的不同返回不同类的实例. •简单工厂模式实质是由一个工厂类根据传入的参量,动态的决定应该创建出哪一个产品类的实例. •简单工厂模式实际上不属于23个GOF模式,但他可以作为工厂方法模式(Factory Method)的一个引导. UML图: 该模式中包含的角色及其职责:    工厂(SimpleFactory)角色   简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。    抽象产品(Product)角色   简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。    具体产品(Concrete Product)角色   是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。 优缺点分析: 优点 •工厂类是整个模式的关键.包含了必要的逻辑判断,根据外界给定的信息,决定究竟应该创建哪个具体类的对象.通过使用工厂类,外界可以从直接创建具体产品对象的尴尬局面摆脱出来,仅仅需要负责“消费”对象就可以了.而不必管这些对象究竟如何创建及如何组织的.明确了各自的职责和权利

简单工厂模式

こ雲淡風輕ζ 提交于 2020-01-26 05:12:35
一.简单工厂模式又称静态工厂方法模式(Static Factory Method),它不是Gof 所讲的23种设计模式之一,但是它却是我们在编码过程中经常使用的方法之一。 1.静态工厂方法统一管理对象的创建。 静态工厂方法通过传入的参数判断决定创建哪一个产品的实例,封装了对象的创建,客户端只管消费,实现了对责任(模块)的分割。 2.静态工厂方法推迟了产品的实例化。 通过XML配置文件就能改变具体要创建的产品实例,修改为其它的产品实例,代码不须重新编译。 二.简单工厂模式还是有缺点的,后面的工厂方法模式和抽象工厂模式就是对这些缺点的改善。讲完了这三种模式将会有一个对比。以下以Nokia手机为例,采用简单工厂模式设计的源代码雏形。 [cpp] view plain copy print ? /* Nokia抽象产品 */ #pragma once #include <string> #include <iostream> class CNokia { public : CNokia( void ); public : virtual ~CNokia( void ); public : virtual bool MakeCall( const std::string & number) const = 0; }; #include "Nokia.h" CNokia::CNokia(

单例模式,简单工厂模式

北慕城南 提交于 2020-01-26 05:05:51
单例模式的目的:保证一个类仅有一个实例,并提供一个访问实例的全局访问点。 要点:1、单例类拥有一个私有构造函数,确保用户无法通过new 关键字去直接实例化它。 2、单例模式包含一个静态私有成员变量与静态公用工厂方法。 设计代码: public class Singleton{ private static Singleton instance=null; private Singleton(){ } public static Singleton getInstance(){ if(instance==null){ instance = new Singleton(); } return instance; } } 简单工厂模式 模式分析: 1.将对象的创建和对象本身的业务处理分离,可以降低系统的耦合度,使得两者修改起来都相对容易。 2.在调用工厂类的工厂方法是,由于工厂方法是静态方法,使用起来很方便,可通过类名直接调用,而且只需要传入一个简单的参数即可,在实际开发中,还可以在调用时将所传入的参数保存在XML等格式的配置文件中,修改参数是无须修改任何的java源代码。 3.简单工厂模式最大的问题是工厂类的职责相对过重,增加新的产品需要修改工厂类的判断逻辑,这一点与开闭原则是相对违背的。 4.简单工厂模式的要点在于:当你需要什么,只需要传入一个正确的参数,就可以获取你所需要的对象

点菜(简单工厂模式)

早过忘川 提交于 2020-01-26 04:54:44
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace _016 { //抽象类(菜) public abstract class Food { //抽象方法,输出点了的菜 //抽象方法接下来会被重写,直接调用抽象方法就可以 public abstract void Print();//抽象方法没有方法体 } //打印土豆丝 类 //重写抽象方法 public class tds : Food { public override void Print() { Console.WriteLine("来份土豆丝"); } } //打印西红柿 类 //抽血抽象方法 public class xhs : Food { public override void Print() { Console.WriteLine("来份西红柿"); } } //工厂类 厨师 public class cs { public static Food CreateFood(string t) { Food food = null; if (t.Equals("土豆丝")) { food = new tds(); } else if (t.Equals("西红柿")) {

java设计模式简单归纳

谁说我不能喝 提交于 2020-01-25 12:16:53
1工厂模式:用来创建单一产品( 生产产品的接口只有一个方法 通过不用的实现生产不同的产品) 用统一接口来完成生产类的方法 具体对象通过具体实现类来产生 类对象的方法也可以用接口定义 具体功能也是通过具体实现类产生 2抽象工厂模式:和工厂模式的区别就是用来创建多个产品(生产产品的接口可以有很多方法 每一个来生产不同的产品 不同的实现类区别在于各个产品又有不同分类) 3单利模式: 懒汉:原始标准版 —》syncronized同步式-------》双重检查机制 且变同步方法为代码块锁 静态内部类: 利用了类加载机制来保证类初始化时候只有一个单例,线程安全的且没有性能损耗 饿汉式: 浪费资源 因为一旦类的其他静态方法 方法被使用或者类加载了 即使没有用到单例也会创建 特殊饿汉式---注册登记式 存放在ConcurrentHashMap中 枚举单例: 可以防止同步问题和反序列化 4 来源: CSDN 作者: javHao 链接: https://blog.csdn.net/weixin_40695328/article/details/104072058

设计模式之简单工厂模式

喜欢而已 提交于 2020-01-25 09:32:56
这个是设计模式系列的第一篇:简单工厂模式 到底实例化谁,将来会不会增加实例化的对象,使用一个单独的类来做这个创造实例的过程,这个就是工厂 例子,计算器的例子。加减乘除,首先实现一个操作类(抽象类),然后继承它实现加减乘除四个类。最后,使用一个单独的类来实现这个过程。 uml:的定义 1.类:第一行是类的名称;第二行是特性;第三行是操作。注意若类的名称是斜体字那么此类就是一个抽象类。注意特性和操作,前面是加号的为public,前面是减号的为:private,前面是#号的是:protected。 2.依赖关系:虚线箭头来表示。比如,动物依赖于空气和水。 3.组合(合成)关系: 合成关系是一种强的关系,生命周期是一致的。合成关系使用实心的菱形和实线箭头表示。 4.聚合关系:是一种弱的拥有。使用的是空心的菱形和实线箭头表示。 5.关联关系:比如企鹅与天气是关联关系。使用的是实线箭头表示。 6.实现接口:实现接口用空心三角形加虚线表示。 接口有矩形表示法和棒棒糖表示法。(1)矩形表示法:顶端有一个《interface》,第一行是接口的名称,第二行是接口的方法。 (2)棒棒糖表示法:圆圈旁为接口的名称,接口方法在实现类中出现。 7.继承关系:使用的是空心三角形和是实线表示。 来源: CSDN 作者: Best_wxw 链接: https://blog.csdn.net/Best_ideal

说说设计模式~简单工厂模式(Factory)

不想你离开。 提交于 2020-01-22 22:07:07
返回目录     简单工厂模式Simple Factory根据提供给它的数据,返回一个类的实例。通常它返回的类都有一个公共的父类(或者接口对象)。 简单工厂的作用是实例化对象,而不需要客户了解这个对象属于哪个具体的子类。简单工厂实例化的类具有相同的接口或者基类,在子类比较固定并不需要扩展时,可以使用简单工厂。如数据库生产工厂就是简单工厂的一个应用。 采用简单工厂的优点是可以使用户根据参数获得对应的类实例,避免了直接实例化类,降低了耦合性;缺点是可实例化的类型在编译期间已经被确定,如果增加新类 型,则需要修改工厂,不符合OCP(开闭原则)的原则。简单工厂需要知道所有要生成的类型,当子类过多或者子类层次过多时不适合使用。 下面是我实例中的类结构图,它有一个ICreate的公共接口,有一个方法叫Create,返回值为Void 其中公用的接口代码如下:(最后工厂的返回值类型) 1   /// <summary> 2 /// 简单工厂接口,返回值类型 3 /// </summary> 4 public interface ICreate 5 { 6 void Create(); 7 } 而下面,分别用people和animal两个类去实现了ICreate接口,并实现了它的Create方法。 1      /// <summary> 2 /// 人类实现工厂接口 3 /// </summary