当前位置: 首页 > news >正文

最专业的手机网站建设找做网站的公司

最专业的手机网站建设,找做网站的公司,衡水外贸网站建设,强大的wordpress插件工厂方法模式就是定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法模式将类的实例化(具体产品的创建)延迟到工厂类的子类(具体工厂)中完成,即由子工厂类来决定该实例化哪一个类。 Define a…

工厂方法模式就是定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法模式将类的实例化(具体产品的创建)延迟到工厂类的子类(具体工厂)中完成,即由子工厂类来决定该实例化哪一个类

Define an interface for creating an object, but let subclasses decide which class to instantiate.
The Factory method lets a class defer instantiation it uses to subclasses.  

结构设计

工厂方法模式包含如下角色:
Product,抽象产品,用来定义工厂方法所创建的对象的接口。
ConcreteProduct,具体产品,用来实现Product的接口。
Factory,抽象工厂,负责声明工厂方法,该方法返回一个Product类型的对象。
ConcreteFactory,具体工厂,用来实现Factory声明的工厂方法。
工厂方法模式类图表示如下:
请添加图片描述

伪代码实现

接下来将使用代码介绍下工厂方法模式的实现。

// 1、定义产品(Product)抽象类(也可以是基类),对产品接口进行声明
public abstract class Product {abstract void function();
}
// 2、定义具体产品(Concrete Products),产品接口的不同实现
public class ConcreteProductA extends Product {@Overridepublic void function() {System.out.println("---------do some thing in a ConcreteProductA instance---------");}
}
public class ConcreteProductB extends Product {@Overridepublic void function() {System.out.println("---------do some thing in a ConcreteProductB instance---------");}
}
// 3、产品工厂(Product Factory)抽象类或基类,声明返回产品对象的工厂方法。该方法的返回对象类型必须与产品接口相匹配。
// 可以将工厂方法声明为抽象方法,强制要求每个子类以不同方式实现该方法。或者,在基础工厂方法中返回默认产品类型。
// 注意,该类最主要的职责并不是创建产品。 一般来说, 产品工厂类包含一些与产品相关的核心业务逻辑。工厂方法将这些逻辑处理从具体产品类中分离出来。
public abstract class ProductFactory {/*** 生产产品*/abstract Product create();
}
// 4、具体产品工厂(Concrete Product Factories)重写基础工厂方法, 使其返回不同类型的产品。
// 注意, 并不一定每次调用工厂方法都会创建新的实例。工厂方法也可以返回缓存、对象池或其他来源的已有对象。
public class ProductFactoryA extends ProductFactory {@Overridepublic Product create() {System.out.println("create ProductA");return new ConcreteProductA();}
}
public class ProductFactoryB extends ProductFactory {@Overridepublic Product create() {System.out.println("create ProductB");return new ConcreteProductB();}
}
// 5、客户端调用
public class FactoryMethodClient {public void foo() {// (1) 实例化产品工厂ProductFactory productFactoryA = new ProductFactoryA();// (2) 生产产品Product productA = productFactoryA.create();// (3) 使用产品productA.function();ProductFactory productFactoryB = new ProductFactoryB();Product productB = productFactoryB.create();productB.function();}
}

适用场景

在以下情况下可以考虑使用工厂方法模式:
(1) 如果无法预知对象确切类别及其依赖关系时,可使用工厂方法。
工厂方法将创建产品的代码与实际使用产品的代码分离,从而能在不影响其他代码的情况下扩展产品创建部分代码。
例如,如果需要添加一种新产品,则只需要开发新的产品工厂子类,然后重写其工厂方法即可。
(2) 如果希望用户能扩展软件库或框架的内部组件,可使用工厂方法。
继承是扩展软件库或框架默认行为的最简单方法。但是,当使用子类替代标准组件时,框架如何辨识出该子类?解决方案是将各框架中构造组件的代码集中到单个工厂方法中,并在继承该组件之外允许任何人对该方法进行重写。
(3) 如果希望复用现有对象来节省系统资源,而不是每次都重新创建对象,可使用工厂方法。
在处理大型资源密集型对象(如数据库连接、文件系统和网络资源等)时, 经常需要服用现有对象已节省资源。
正常情况下,为实现现有对象的复用,其处理流程一般如下:
首先,创建存储空间来存放经创建的对象。
然后,在外部请求对时,将优先在对象池中搜索可用对象。如果存在则立即返回该对象。
如果没有可用对象,则创建并返回该新对象(并将其添加到对象池中)。
为避免上述代码不会因为重复而污染程序(对象的创建场景可能很多),可以将这些代码放在试图重用的对象类的构造函数中。
但是从定义上来讲,构造函数始终返回的是新对象,其无法返回现有实例。针对这种既需要一个能够创建新对象,又可以重用现有对象的场景,工厂方法是最佳选择。

优缺点

工厂方法模式有以下优点:
(1) 将创建产品的代码与实际使用产品的代码分离(解耦),避免产品创建工厂和实际产品之间的紧耦合。
(2) 单一职责原则。产品创建代码放在单独的类里,从而使得代码更容易维护。
(3)开闭原则。无需更改客户端调用代码, 就可以在程序中引入新的产品类型。
但是工厂方法模式也存在以下缺点:
(1) 应用工厂方法模式需要引入许多新的子类,代码会因此变得更复杂。最好的情况是将该模式引入产品类的现有层次结构中(将工厂类组合到产品类里)。
(2) 由于考虑到系统的可扩展性,需要引入抽象层,在客户端代码中均使用抽象层进行定义,增加了系统的抽象性和理解难度,且在实现时可能需要用到反射等技术,增加了系统的实现难度。

参考

https://www.edrawsoft.cn/ 亿图图示
《设计模式:可复用面向对象软件的基础》 Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides 著 李英军, 马晓星 等译
https://design-patterns.readthedocs.io/zh_CN/latest/creational_patterns/factory_method.html 工厂方法模式
https://refactoringguru.cn/design-patterns/factory-method 工厂方法模式
https://blog.csdn.net/ShuSheng0007/article/details/86636494 秒懂设计模式之工厂方法模式
https://www.runoob.com/design-pattern/factory-pattern.html 工厂模式

http://www.qdjiajiao.com/news/2781.html

相关文章:

  • 网站优化提升排名seo外包公司怎么样
  • 工作室官网源码优化seo深圳
  • 凡科网站后台河南seo推广
  • 哪个网站服务器比较好建立企业网站步骤
  • 2023年新的病毒又来了系统优化工具
  • 小红书体现的网络营销方式网站seo怎么操作
  • 帝国cms怎么做网站杭州网站优化方案
  • 用cms做网站的缺点百度惠生活商家入驻
  • 合肥网站开发网络营销优化
  • 花生壳 建设网站南昌seo招聘信息
  • 北京网站手机站建设公司吗google play商店
  • 做公司宣传册的网站旺道智能seo系统
  • 企业建设网站的预期收益百度推广代理商利润
  • 2017电商网站建设背景网站设计专业的公司
  • 怎么用html做百度首页网站做seo必须有网站吗
  • 站群建站济南网络优化网站
  • 网站的交互体验今日nba数据帝
  • 黑苹果做网站开发吗梁水才seo优化专家
  • 莱芜网站制作seo优化网络推广
  • 怎么自己搭建网站竞价代运营公司哪家好
  • 沈阳模板建站方案搜狗搜索推广
  • 网站建设报告论文类似凡科建站的平台
  • 创意设计广告关于seo如何优化
  • 专业外贸网站制作搜索引擎seo优化平台
  • 网站建设找天宇智能千锋教育可靠吗
  • 建站知识百度指数入口
  • 网站建设维护保密协议书可以发外链的论坛有哪些
  • 上海建设人才网站国外引流推广平台
  • 苏州手机网站制作网络营销与电子商务的区别
  • 郑州网站建设公司哪家专业好营销型企业网站推广的方法有哪些