网站为什么会出现死链,南山网站建设哪家好,网站建设的功能都需要有哪些,网页设计规范有哪些设计模式 工厂方法在前面的“设计模式”示例中#xff0c;我们解释了当今常用的“工厂”模式。 在本节中#xff0c;我们将了解具有更多抽象的更高级的解决方案。 该模式称为工厂方法设计模式。 定义#xff1a; Factory方法模式提供了一种用于创建对象的方法#xff0c;… 设计模式 工厂方法 在前面的“设计模式”示例中我们解释了当今常用的“工厂”模式。 在本节中我们将了解具有更多抽象的更高级的解决方案。 该模式称为工厂方法设计模式。 定义 Factory方法模式提供了一种用于创建对象的方法但是将对象创建委托给了子类。 工厂方法设计模式以类似于工厂模式的方式解决了这些问题并附加了抽象级别。 可以使用new关键字实例化该对象。 例如对象A使用以下方法创建另一个对象B ClassB objB new ClassB(); 因此对象A拥有对对象B的引用。 对象实例化对象实例化 由于对象A现在依赖于对象B如果后来对其进行了修改那么我们将不得不重新编译对象A。 对象的创建可能更加复杂如果存在更多的耦合那么维护将是软件开发中一项痛苦而昂贵的工作。 为了避免这种最坏的情况我们提供了新颖的设计模式来进行救援。 他们试图在客户端和对象创建者之间创建松散的耦合并为开发者提供其他一些设计优势。 Factory Method模式就是解决设计问题的一种模式。 常用 工厂方法设计模式通常与装饰器设计模式一起用于各种框架例如StrutsSpringApache中。 有许多基于此Factory模式的J2EE模式例如DAO模式。 让我们以服装工厂为例我们正在创建各种类型的服装但是客户完全不知道这些产品是如何创建的。 即使我们必须添加新的服装类型例如夹克也无需更改客户端代码从而增加了应用程序的灵活性。 工厂模式类图 何时使用工厂方法模式 对象的创建需要代码的重用而无需大量重复代码。 一个类将不知道需要创建哪些子类。 子类可以指定应创建哪些对象。 父类将把对象的创建委托给它的子类。 结构体 下图突出显示了工厂方法设计模式的典型结构。 与上述示例不同已添加了一个附加的Factory AbstractFactory类。 工厂方法设计模式UML 在上图中以下是参与者 产品这为工厂方法创建的对象定义了一个接口。 具体产品实现产品接口。 工厂创建者这是一个抽象类定义了返回产品对象的工厂方法。 具体工厂此类实现并覆盖由父工厂类声明的方法。 客户例如对象类A将要使用由ConcreteFactory类对象类B创建的产品。 但是在这种情况下客户端仅持有对接口B的引用而不是对象“类B”因此它不需要了解有关类B的任何信息。 实际上可以有多个类可以实现抽象类。 Factory Method模式允许子类决定实例化哪个类的含义是什么 从根本上讲这意味着对工厂抽象类进行编码而无需知道将实例化哪些实际的ConcreteProduct类即它是Trouser还是Shirt。 这完全由ConcreteFactory类确定。 现在将上述模式实现到我们的GarmentFactory示例中。 工厂方法示例 让我们开始吧。 我们不会重复在Factory Pattern文章中找到的具体产品的代码例如Shirt.java和Trouser.java。 已创建一个面向客户的新Factory抽象类。 public abstract class Factory {protected abstract GarmentType createGarments(String selection);} 需要修改GarmentFactory类以继承抽象类Factory。 public class GarmentFactory extends Factory{public GarmentType createGarments(String selection) {if (selection.equalsIgnoreCase(Trouser)) {return new Trouser();} else if (selection.equalsIgnoreCase(Shirt)) {return new Shirt();}throw new IllegalArgumentException(Selection doesnot exist);}
} 客户端类引用Factory类并对Factory的createGarmentsselection方法进行分类以在运行时创建产品。 Factory factory new GarmentFactory();
GarmentType objGarmentType factory.createGarments(selection);
System.out.println(objGarmentType.print()); 优点 通过将对象创建从客户端代码移到Factory类及其子类代码可以灵活松耦合和可重用。 由于异议创建是集中的因此维护此类代码更加容易。 客户代码仅处理产品接口因此可以在不修改客户代码逻辑的情况下添加任何具体产品。 Factory Method的优点是它可以多次返回相同的实例或者可以返回子类而不是该确切类型的对象。 它通过工厂创建对象来鼓励代码的一致性该工厂强制执行每个人都必须遵循的一组明确规则。 这样可以避免在不同的客户端使用不同的构造函数。 例 JDBC是这种模式的一个很好的例子。 应用程序代码不需要知道它将与哪个数据库一起使用因此它也不知道应使用哪个特定于数据库的驱动程序类。 相反它使用工厂方法来获取ConnectionsStatement和其他对象。 这提供了更改后端数据库的灵活性而无需更改您的DAO层。 以下是SDK中的一些示例 valueOf方法返回由工厂创建的对象该对象与传递的参数值相等。 getInstance方法该方法创建Singleton类的实例。 newInstance方法该方法用于每次调用时从工厂方法创建和返回新实例。 下载示例代码 参考 Idiotechie博客上来自JCG合作伙伴 Mainak Goswami的使用Factory Method Pattern设计最佳实践 。 翻译自: https://www.javacodegeeks.com/2012/10/design-best-practices-using-factory-method-pattern.html设计模式 工厂方法