2024年10月简单工厂模式满足什么原则(设计模式简单工厂模式)

 更新时间:2024-10-12

  ⑴简单工厂模式满足什么原则(设计模式简单工厂模式

  ⑵设计模式简单工厂模式

  ⑶作为一个接触设计模式已经超过十年的同行,首先我希望你能好好理解面向对象的方法学和基本原则,比如OCP、SRP等,然后再去慢慢学习、实践、理解、再实践和总结设计模式的方方面面和林林总总。接下来我说一下你问的简单工厂设计模式,严格来说它并不属于真正的设计模式,但却可能成为学习设计模式的敲门砖。简单工厂设计模式就是将“生成对象的过程”封装起来,而不是左一个newX类,又一个newY类。用一个类(或一个对象将一组相关类的对象的产生过程封装起来的好处是显而易见的——使用起来统一化,因为使用的仅仅是一个类(或一个对象,好比一个统一的窗口(而不是左一个newX类,又一个newY类;修改起来独立化,因为修改集中在一个类之中,既便于查找、修改和理解,又避免与其他的模块发生不必要的耦合(甚至出现为了改这里影响到了那里的情况。

  ⑷工厂模式,简单工厂模式,抽象工厂模式三者有什么区别

  ⑸工厂模式的好处就在于将工厂和产品之间的耦合降低,将具体产品的构造过程放在了具体工厂类里面。在以后扩展产品的时候方便很多,只需要添加一个工厂类,一个产品类,就能方便的添加产品,而不需要修改原有的代码。而在简单工厂中,如果要增加一个产品,则需要修改工厂类,增加if/else分支,或者增加一个case分支,工厂模式符合软件开发中的OCP原则(opencloseprinciple,对扩展开放,对修改关闭。抽象工厂模式:这个模式我总是感觉和builder模式非常相似。工厂方法模式提供的是对一个产品的等级模式,,而抽象工厂方法提供的是对多个产品的等级模式,注意,这里的多个具体产品之间是相互耦合的,也就是说这里的抽象工厂提供的产品之间是存在某种联系的。有人做如下的比较:工厂方法模式:一个抽象产品类,可以派生出多个具体产品类。一个抽象工厂类,可以派生出多个具体工厂类。每个具体工厂类只能创建一个具体产品类的实例。抽象工厂模式:多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。一个抽象工厂类,可以派生出多个具体工厂类。每个具体工厂类可以创建多个具体产品类的实例。区别:工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。下面是一个形象的比喻:无论是简单工厂模式、工厂模式还是抽象工厂模式,它们本质上都是将不变的部分提取出来,将可变的部分留作接口,以达到最大程度上的复用。拿一个生产水杯(cup的工厂举例:起初,不用工厂模式,我必须在生产水杯之前知道水杯的材料和形状等水杯的所有特征才能生产,这就是我们的newCup();这个Cup必须是具体的。厂主发现同一形状的被子,只是材料不同,如一个是玻璃(glass)的,一个是瓷(china)的,但是确要两条生产线,显然有资源浪费的嫌疑。现在厂主生产杯子时先不让生产线知道我要产的是玻璃的还是瓷的,而是让它在不知道具体材料的情况下先做它能做的,等到它把模具做好,只需要向其中填充玻璃原料或者瓷原料就可以造出同一形状的具体杯子了。但是很可惜,java并不能new一个抽象的Cup,所以就有了简单工厂模式。原来是Cupcup=newCup;现在是SimpleCupFactory.createCup(StringcupName),根据cup的名字生产Cup,而createCup返回的是一个实现了Cup接口或抽象类的具体Cup。简单抽象工厂模式有一个问题,就是当我现在想生产一个同样形状的铁杯时,工厂里并没有定义相应的处理流程,只能更改createCup方法,这就不合理了。我现在只是想生产铁杯,你只要在最后的时候把玻璃原料换成铁的不就行了吗,干嘛还要更改整条生产线呢?于是就有了工厂模式。原来生产线在生产模具的时候还要考虑是为玻璃杯生产的模具还是为铁杯生产的模具,现在它不用管了。CupFactory.createCup()创建Cup.CupFactory是接口或抽象类。实现它的具体子类会创建符合Cup接口的具体Cup。那么现在厂主想要生产水壶(kettle),用工厂模式就不得不再造一条水壶生产线,能不能在水杯生产线同时生产水壶呢?这就是抽象工厂模式。

  ⑹工厂模式,简单工厂模式,抽象工厂模式三者有什么区别

  ⑺工厂模式、简单工厂模式、抽象工厂模式三者的区别:

  ⑻创建对象不同。创建对象时,“工厂模式”使用Factory模式替代使用new创建对象;“简单工厂模式”使用fw模式建立对象;“抽象工厂模式”则使用迭代模式创建对象。

  ⑼定义变量不同。“工厂模式”不用事先定义变量,使用时随时引用便可。“简单工厂模式”,使用参数或者配置文件等事先定义好的变量,然后利用分支判断初始化具体产品类并返回。“抽象工厂模式则”不符合“开发-封闭”原则,每次增加产品,都需要修改类方法。

  ⑽接口数量不同。“工厂模式”有两至三个接口。“简单工厂模式”只有一个接口。抽象工厂模式理论上具有无限个接口。

  ⑾编程使用“工厂模式”的优缺点:

  ⑿方便扩展算法,比如增加一个开根号的功能,我们只要继续继承运算类就行了,同时客户端也就是使用者不知道具体的实现细节,只要给出相关标示符,工厂函数就马上给他创建一个他想要的实体就行了。减少了使用者和功能开发者之间的耦合度。

  ⒀在进行扩展的时候,我们要更改工厂函数里面的那个分支语句Switch,这样便破坏了OCP,而且当有多级结构继承的时候,简单工厂就会因为只能对应平行一层记得继承,不得不使得好多类继承同一个接口,然后得到A*B这么多的工厂实体可能,工厂函数很难维护。

  ⒁设计模式,求工厂模式原理

  ⒂工厂模式包括简单工厂模式、工厂方法模式和抽象工厂模式。无论是哪种工厂模式实际上都是OCP(Open-ClosedPrinciple原理的具体应用。OCP即对扩展开放,对修改关闭。所以要理解和运用工厂模式最重要的是弄清楚OCP原则。当然更准确地说,简单工厂模式并不能完全体现OCP的原理,但可以认为其是由无OCP设计向有OCP设计的过渡。初学者不要纠结于设计模式本身,而应该从OO(面向对象设计的基本原则或原理学起。实际上当你能够完全理解OOD的原理后,设计模式就非常好理解了,甚至你可以推导出来设计模式或其实例化场景化的变体。

  ⒃工厂设计模式(—枚举实现工厂模式

  ⒄工厂设计模式(—普通的工厂模式工厂设计模式(—枚举实现工厂模式

  ⒅简单工厂模式的核心,负责创建所有实例的内部逻辑,工厂类可以被外界直接调用,创建所需的产品对象。

  ⒆所创建所有对象的父类,负责描述所有实例的所共有的公共接口。

  ⒇所创建的具体实例对象。

  ⒈每个枚举项都是该枚举类的实例对象,那么是不是定义一个方法便可以生成每个枚举项对应产品。

  ⒉枚举类型虽然不能继承,但是可以用abstract修饰其方法,此时表示该枚举是一个抽象枚举对象,需要每个枚举项自行实现该方法。

  ⒊一般的静态工厂模式,需要接受客户端的参数来选择哪种具体产品的构建,这无形中会产生错误(比如null值问题,Class对象不存在。但是枚举类型产生的工厂模式便不存在该问题,不需要传递任何参数,只需要选择生成什么类型的产品即可。

  ⒋枚举类型的计算是以int类型的计算为基础的,这是最基本的操作,性能当然很快。

  ⒌普通方式实现的工厂模式,无论生产方法接收的是Class、String、Int类型,都会成为客户端的负担,这些类并不是客户度需要的,而是因为工厂方法的限制必须输入的。其实也就违背了Lod(最少知识原则:一个对象应该对其他对象有最少的了解。

  ⒍工厂方法模式(FactoryMethod)

  ⒎在了解工厂方法模式前不得不提的就是简单工厂模式,简单工厂模式就是建造了一个工厂用于生产各式各样的产品,但是他是静态的,一旦写完后就不能改动了,很明显他并不符合我们的设计理念,纵观七大设计原则,体现的都是高聚合,低耦合,封闭强,易拓展。这种死板的设计模式怎么可能为我们继续使用呢?于是,工厂方法模式诞生了。工厂方法模式之于简单工厂模式就好比活字印刷术之于印刷术,更加灵活,可用性高,易拓展。

  ⒏与简单工厂不同的是,工厂方法模式中的工厂不必再去负责所有产品的具体创建,而是创建一个虚拟工厂,然后再对其进行实现具体工厂以完成不同产品的创建。这样做的好处显而易见,当我们想继续为这个工厂添加新产品的时候不需要修改原本的工厂,只需要实现虚拟工厂就可以完成新产品的创建。

  ⒐工厂方法模式(FactoryMethodPattern)又称为工厂模式,也叫虚拟构造器(VirtualConstructor)模式或者多态工厂(PolymorphicFactory)模式,它属于创建型模式。在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成。

  ⒑工厂方法模式包含如下角色:

  ⒒这里我们制作一个形状工厂,用于生产各式各样的形状

  ⒓Runningresult:

  ⒔你可以直接在我的github获取该实例的源码及STARUML项目:)

  ⒕还想要了解其他设计模式?戳这里!

  ⒖简单工厂模式的优缺点

  ⒗优点工厂类是整个模式的关键.包含了必要的逻辑判断,根据外界给定的信息,决定究竟应该创建哪个具体类的对象.通过使用工厂类,外界可以从直接创建具体产品对象的尴尬局面摆脱出来,仅仅需要负责“消费”对象就可以了。而不必管这些对象究竟如何创建及如何组织的.明确了各自的职责和权利,有利于整个软件体系结构的优化。缺点由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中;它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。当系统中的具体产品类不断增多时候,可能会出现要求工厂类根据不同条件创建不同实例的需求.这种对条件的判断和对具体产品类型的判断交错在一起,很难避免模块功能的蔓延,对系统的维护和扩展非常不利;这些缺点在工厂方法模式中得到了一定的克服。使用场景工厂类负责创建的对象比较少;客户只知道传入工厂类的参数,对于如何创建对象(逻辑不关心;由于简单工厂很容易违反高内聚责任分配原则,因此一般只在很简单的情况下应用。C++代码://算法的父类,抽象出返回结果的接口class?Operation{public:????virtual?int?GetResult()?=;public:????double?m_Num;????double?m_Num;};//工厂类,用于生产相应的算法子类class?OperationFactry{public:????OperationFactry(void);????~OperationFactry(void);public:????static?Operation*?CreateOperate(int?n?)????{????????switch(n)????????{????????case?:????????????return?new?OperationAdd;????????????break;????????}????}};//算法子类,由工厂类创建,重写父类中的虚函数class?OperationAdd:Public?Operation{public:????int?GetResult();};

  ⒘谁能帮简单介绍一下工厂模式呢

  ⒙你好,很高兴能解答你的问题。

  ⒚首先工厂模式是软件开发中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

  ⒛在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

  工厂模式主要的意图是:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。

  案列:您需要一辆汽车,可以直接从工厂里面提货,而不用去管这辆汽车是怎么做出来的,以及这个汽车里面的具体实现。、Hibernate换数据库只需换方言和驱动就可以。

  优点:?、一个调用者想创建一个对象,只要知道其名称就可以了。、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。、屏蔽产品的具体实现,调用者只关心产品的接口。

  缺点:每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。这并不是什么好事。

  案例:日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等,用户可以选择记录日志到什么地方。、数据库访问,当用户不知道最后系统采用哪一类数据库,以及数据库可能有变化时。、设计一个连接服务器的框架,需要三个协议,“POP“、“IMAP“、“HTTP“,可以把这三个作为产品类,共同实现一个接口。

  注意事项:作为一种创建类模式,在任何需要生成复杂对象的地方,都可以使用工厂方法模式。有一点需要注意的地方就是复杂对象适合使用工厂模式,而简单对象,特别是只需要通过new就可以完成创建的对象,无需使用工厂模式。如果使用工厂模式,就需要引入一个工厂类,会增加系统的复杂度。

  希望能帮到你,谢谢!

  工厂模式,简单工厂模式,抽象工厂模式三者有什么区别

  工厂模式,简单工厂模式,抽象工厂模式三者区别如下:

  首先,三者的创建对象是不相同的。

  进行创建对象时,“工厂模式”不使用new创建对象,而是使用Factory模式;“简单工厂模式”则是通过fw模式来建立对象;“抽象工厂模式”使用迭代模式来创建对象。

  其次,三者的定义变量不同。

  “工厂模式”在使用时可以随时设置变量,不用提前进行设置。“简单工厂模式”中需要使用参数或者配置文件等已经定义好的变量,然后才能进行下一步的操作。“抽象工厂模式则”则需要每次增加产品时,进行修改类方法。

  最后,三者的接口数量不同。“工厂模式”可以使用两个接口以及三个接口,“简单工厂模式”只可以使用一个接口。“抽象工厂模式”则可以使用无限个接口。

  优点:工厂类含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品对象的责任,而仅仅“消费“产品。简单工厂模式通过这种做法实现了对责任的分割。

  当产品有复杂的多层等级结构时,工厂类只有自己,以不变应万变,就是模式的缺点。因为工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都要受到影响。

  缺点:系统扩展困难,一旦添加新产品就不得不修改工厂逻辑,有可能造成工厂逻辑过于复杂,违背了“开放--封闭“原则(OCP)。另外,简单工厂模式通常使用静态工厂方法,这使得无法由子类继承,造成工厂角色无法形成基于继承的等级结构。

  什么是PHP中的工厂设计模式

  工厂模式分为三种:简单工厂、工厂方法、抽象工厂,三种工厂的区别是,抽象工厂由多条产品线,而工厂方法只有一条产品线,是抽象工厂的简化。而工厂方法和简单工厂相对,大家初看起来好像工厂方法增加了许多代码但是实现的功能和简单工厂一样。但本质是,简单工厂并未严格遵循设计模式的开闭原则,当需要增加新产品时也需要修改工厂代码。但是工厂方法则严格遵守开闭原则,模式只负责抽象工厂接口,具体工厂交给客户去扩展。在分工时,核心工程师负责抽象工厂和抽象产品的定义,业务工程师负责具体工厂和具体产品的实现。只要抽象层设计的好,框架就是非常稳定的。

您可能感兴趣的文章:

相关文章