我正在考虑这个工厂设计模式的例子,假设我有两个客户端使用这个通知库,在下面的例子中,各个客户端的代码如下所示。
案例1:没有工厂模式
客户端1
SMSNotification notification = new SMSNotification();
notification.notifiyUser();
客户端2
EmailNotification notification = new EmailNotification();
notification.notifiyUser();
案例2:使用工厂模式
客户端1
Notification notification = notificationFactory.createNotification("SMS");
notification.notifiyUser();
客户端2
Notification notification = notificationFactory.createNotification("Email");
notification.notifiyUser();
所以现在假设通知团队在他们的库中添加了一个新的通知系统,如果假设客户端2想要包含它,那么在情况1中我必须更改具体类名,在情况2中我必须将字符串值更改为新值,所以无论如何,在这两种情况下我都必须进行更改。
工厂设计模式如何提供帮助?
你可以有一个DB表(如果可能的话),其中包含服务的详细信息,例如“短信”、“电子邮件”、“推送”等。
然后你就可以看这张表了
通过这种方式,您无需重新编译整个项目,只需维护一个表,您可以在其中添加/删除/禁用/启动通知服务。
可以从外部属性文件中读取“SMS”或“Email”字符串。
然后,您可以配置工厂,而无需重新编译项目。
我们还使用了一种称为关注点分离SoC的设计原则。可以有多个“关注点”来分离,例如业务逻辑和数据检索。
SoC之一是分离配置和应用程序逻辑。应用此功能,我们可以配置应用程序的行为,这非常有用。
例如,我们可以在测试环境和生产环境中运行相同的应用程序代码,唯一的区别是配置。在你的例子中,我们可以在测试环境中运行一个“假电子邮件”工厂,防止我们向实际客户发送不需要的电子邮件(真实故事)。
介绍 与创建型模式类似,工厂模式创建对象(视为工厂里的产品)时无需指定创建对象的具体类。 工厂模式定义一个用于创建对象的接口,这个接口由子类决定实例化哪一个类。该模式使一个类的实例化延迟到了子类。而子类可以重写接口方法以便创建的时候指定自己的对象类型。 这个模式十分有用,尤其是创建对象的流程赋值的时候,比如依赖于很多设置文件等。并且,你会经常在程序里看到工厂方法,用于让子类类定义需要创建的对象类型
本文向大家介绍Python设计模式之工厂模式简单示例,包括了Python设计模式之工厂模式简单示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python设计模式之工厂模式。分享给大家供大家参考,具体如下: 工厂模式是一个在软件开发中用来创建对象的设计模式。 工厂模式包涵一个超类。这个超类提供一个抽象化的接口来创建一个特定类型的对象,而不是决定哪个对象可以被创建。 为了实现此方法,需要
简单工厂(Simple Factory) Intent 在创建一个对象时不向客户暴露内部细节,并提供一个创建对象的通用接口。 Class Diagram 简单工厂把实例化的操作单独放到一个类中,这个类就成为简单工厂类,让简单工厂类来决定应该用哪个具体子类来实例化。 这样做能把客户类和具体子类的实现解耦,客户类不再需要知道有哪些子类以及应当实例化哪个子类。客户类往往有多个,如果不使用简单工厂,那么所
4. 抽象工厂(Abstract Factory) Intent 提供一个接口,用于创建 相关的对象家族 。 Class Diagram 抽象工厂模式创建的是对象家族,也就是很多对象而不是一个对象,并且这些对象是相关的,也就是说必须一起创建出来。而工厂方法模式只是用于创建一个对象,这和抽象工厂模式有很大不同。 抽象工厂模式用到了工厂方法模式来创建单一对象,AbstractFactory 中的 cr
工厂方法(Factory Method) Intent 定义了一个创建对象的接口,但由子类决定要实例化哪个类。工厂方法把实例化操作推迟到子类。 Class Diagram 在简单工厂中,创建对象的是另一个类,而在工厂方法中,是由子类来创建对象。 下图中,Factory 有一个 doSomething() 方法,这个方法需要用到一个产品对象,这个产品对象由 factoryMethod() 方法创建。
我想知道在Spring框架中使用依赖注入的工厂模式的当前最佳实践是什么。我想知道工厂模式在使用Spring依赖注入的情况下是否仍然适用。我做了一些搜索,看到了一些过去的讨论(依赖注入vs工厂模式),但似乎有不同的观点。 我在一些现实生活中的项目中看到使用Map来保存所有的bean,并依靠自动装配来创建这些bean。当需要bean时,它使用密钥通过map获取它。 但是我看到这两种方法有些不同。 使用