在面向对象的编程中,如何产生一个对象呢?即使初学面向对象语言(比如C++、Java、PHP等)的程序员也知道, 最通常的方法是一个 new 操作符产生一个对象实例,new 操作符就是用来构造对象实例的。当我们使用 new 操作符的时候,系统默认执行类的构造函数,然后为我们生产一个对象。
那么,有没有不使用 new 操作符就可以创建对象的方式呢?或者说,我们在某些情况下,是不是需要寻找另外一种创建对象的方式呢?
那我们先看看如果直接用 new 操作符来创建对象会带来一些什么样的问题:
- 我们想要在创建对象的同时进行不同的初始化操作;
- 我们需要生成这个对象的不同的子对象;
- 在创建这个对象之前,我们需要创建所有它的依赖对象。
如何解决这些问题呢?复制/粘贴?肯定有更高效的,就是用我们今天将要介绍的工厂模式,下面是维基百科给出的一个解释:工厂方法模式的实质是“定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类。工厂方法让类的实例化推迟到子类中进行。”
说的通俗一点就是,不需要我们使用的时候去新建(new)一个对象了,而且可以根据需求,当我们需要对象的时候,用工厂来生产一个或者N个,嘻嘻,还可以量产的,如果遇到买5赠1的话,…,有点跑题了,下面写段代码来直观感受一下工厂模式。
未使用工厂模式的数据库代码:
$db = new MySql($user, $password, $database);
使用工厂模式的数据库代码:
$db = DBFactory::create_connection();
前者代码使用的是传统方法,用 new 操作符生成一个新的对象,后者使用了工厂方法,用一个工厂来生产对象。从代码上来看,两者没有什么本质的区别,但是在实现上,工厂方法可以根据不同的需求生产出不同的对象。在第一种方法上,我们的 $db 只能是 MySql 类型,但是在工厂方法中,我们的 $db 可以是任何的实现了 Database 类的子类,可以是 MySql、MsSqlServer等。
工厂方法体现了一个面向对象的思想——封装。设计模式的理念不是封装数据和方法,而是封装变化。当我们需要创建的对象不是 MySql 时,我们只需要修改工厂的 create_connection() 方法,保留工厂方法的接口不变。
原文链接:http://tjwzjs.cn/news/knowledge/2012/1212/60.html
分享到:
相关推荐
36种最新设计模式整理 Design Pattern: Simple Factory 模式 Design Pattern: Abstract Factory 模式 Design Pattern: Builder 模式 Design Pattern: Factory Method 模式 Design Pattern: Prototype 模式 ...
Head.First设计模式中的The Factory Pattern(工厂模式)ppt
3、抽象工厂模式(Abstract Factory Pattern) 用意:一个工厂生产一系列产品
本书结合设计实例从面向对象的设计中精选出23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。本书分类描述了一组设计良好、表达清楚的软件设计模式,这些模式在实用环境下特别...
C++的设计模式之工厂方法模式(Factory Method) C++的设计模式之工厂方法模式(Factory Method) C++的设计模式之工厂方法模式(Factory Method) C++的设计模式之工厂方法模式(Factory Method)
Head First 设计模式 (四) 工厂模式(factory pattern) C++实现
.wkpf,.wkpf1{ font-family:"微软雅黑"; font-size:13px; line-height:30px; text-decoration:none; color:#818183;}1599次浏览 评价:好中差 概述...这就是要说的FactoryMethod模式了。意图定义一个用户创建
文章地址:https://blog.csdn.net/mazhiyuan1981/article/details/110196482
抽象工厂模式(Abstract Factory Pattern) 建造者模式(Builder Pattern) 原型模式(Prototype Pattern) 单例模式(Singleton Pattern) 结构型模式用来处理类或者对象的组合,主要包含以下7种设计...
1. 简单工厂模式(Simple Factory) 2. 工厂方法模式(Factory Method) 3. 抽象工厂模式(Abstract Factory) 这三种模式从上到下逐步抽象,并且更具一般性。还有一种分类法,就是将简单工厂模式看为工厂方法模式的一...
设计模式概述 (100%) 设计模式面面观(2):设计模式基本要素与原则 (100%) 设计模式面面观(3):单件模式(Singletion)-创建型模式 (100%) 设计模式面面观(4):工厂模式(Factory)-创建型模式 (100%...
2、工厂方法模式(Factory Method Pattern) 用意:让每个具体工厂生产具体产品
抽象工厂模式(Abstract Factory Pattern) 引入: 在前面介绍的两个创建型模式里面,我们解决的都是有关"new"的问题,用它们来避免显式指定类创建对象。我写的也非常简单易懂,相信看过的朋友们都应该对简单工厂...
JAVA设计模式(01):创建型-工厂模式【简单工厂模式】(Simple Factory)
NULL 博文链接:https://lym6520.iteye.com/blog/698013
23种模式(Pattern) 1、创建形模式: 1)、单用型:Singleton 2)、工厂方法型:Factory Method 3)、抽象工厂型:Abstract Factory 4)、原型:Prototype 5)、建造型:Builder 2、结构型模式:类与类之间的调用 1...
抽象工厂模式(Abstract Factory) 生成器模式(Builder) 工厂方法模式(Factory Method) 原型模式(Prototype) 单件模式(Singleton) 结构型: 适配器模式(Adapter) 桥接模式(Bridge) 组合模式(Composite) 装饰者模式...
博客 走进设计模式之抽象工厂(Abstract Factory) 对应代码