11种常用设计模式之工厂模式

1)简单工厂模式(Simple Factory)

2)工厂方法模式(Factory Method)

3)抽象工厂模式(Abstract Factory)

简单工厂模式 Simple Factory

简单工厂模式又称静态工厂方法,它属于类创建模式。在简单工厂模式中,可以根据自变量的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常具有共同的父类。

简单工厂模式的角色

1.工厂类(Creator),工厂模式的核心,含有与应用业务逻辑处理的代码。

2.抽象产品(Abstract Product),被工厂创建实例的父类或拥有的共同接口。

3.具体产品(Concrete Product),任何被工厂创建的对象都是它的实例。

简单工厂的优点:

1.工厂类可以根据不同的参数创建不同的产品的实例,客户端可以免除直接创建产品。

2.创建产品实例的方法唯一,减少使用者的记忆。

3.通过配置文件,可以不修改任何客户端代码,即可实现更换和新增具体产品。

简单工厂的缺点:

1.由于工厂类集中了所有的产品创建逻辑,一旦不能正常工作,整个系统都要受到影响。

2.使用简单工厂模式,会增加类的数量,在一定程度上增加系统的复杂度。

3.简单工厂模式使用了静态的工厂方法,造成工厂角色无法形成基于继承的等级结构。

php示例代码:

 1 <?php
 2
 3 $vehicle = Factory::create("plane");
 4 $vehicle->run();
 5
 6
 7 abstract class vehicle{
 8     abstract function run();
 9 }
10
11 class Car extends vehicle{
12
13     public function run(){
14         print("汽车在路上行驶");
15     }
16 }
17
18 class Plane extends vehicle{
19
20     public function run(){
21         print("飞机在天空翱翔");
22     }
23 }
24
25 class Factory{
26
27     public static function create($class){
28         $class = ucfirst($class);
29         $vehicle =  new $class();
30         return $vehicle;
31     }
32 }

简单工厂适用环境

1.工厂负责类比较少

2.客户端只知道传入参数,对于如何创建对象不关心

工厂方法Factory Method

简单的工厂模式一旦程序出现问题,整个系统都无法正常工作,为了降低风险和维护难度,对其重构,所以引入工厂方法。工厂方法为工厂类定义了接口,用多态来削弱工厂类的职能。

相比简单工厂多了一个抽象工厂角色,它是与应用程序无关的,任何在模式中创建对象的工厂类必须实现这个接口。

工厂方法优点:

相比简单工厂模式,用户关心的是对应的工厂,在添加新的产品时,无需修改抽象工厂和抽象产品提供的接口,只需要实现一个具体的工厂和具体产品就可以了。

工厂方法缺点:

1.在添加新的产品时,需要添加两个类。

2.增加系统抽象性和理解难度。

适用环境:

一个类不知道它所需要的对象类,一个类通过其子类来指定哪个对象,将创建对象的任务委托给多个工厂子类中的某个类。

PHP示例代码:

 1 <?php
 2 $factory = new CarFactory();
 3 $vehicle = $factory->create();
 4 $vehicle->run();
 5
 6 abstract class vehicle{
 7     abstract function run();
 8 }
 9
10 class Car extends vehicle{
11
12     public function run(){
13         print("汽车在路上行驶");
14     }
15 }
16
17 class Plane extends vehicle{
18
19     public function run(){
20         print("飞机在天空翱翔");
21     }
22 }
23 abstract class Factory{
24     abstract function create();
25 }
26
27 class CarFactory extends Factory{
28
29     public function create(){
30         $vehicle =  new Car();
31         return $vehicle;
32     }
33 }
34
35 class PlaneFactory extends Factory{
36
37     public function create(){
38         $vehicle =  new Plane();
39         return $vehicle;
40     }
41 }

抽象工厂模式,下次再续。。。

时间: 2024-12-30 15:18:29

11种常用设计模式之工厂模式的相关文章

java常用设计模式之 工厂模式

工厂模式: 定义 一个用于创建对象的接口,让子类决定实例化哪一个类. 一句话概括: 是一个类的实例化延迟到其子类.     适用于 以下情况: ①:当一个类 ,不知道它所必须创建的对象的类的时候. ②:当一个类,希望由它的子类来指定它所创建的对象的时候. ③:当类将创建对象的职责给多个帮助子类中的一个,并且希望将哪一个帮助子类是代理这一信息局部化的时候. 说明: ① Product :定义工厂方法所创建的对象的接口. ② ConcreteProduct:实现Product 接口. ③ Creat

面试题复习-常用设计模式-简单工厂模式

手写一个简单工厂模式 产品接口: package com.ajax.pattern.simplefactory; public interface Fruit { void desc(); } 产品1: package com.ajax.pattern.simplefactory; public class Apple implements Fruit { @Override public void desc() { System.out.println("苹果"); } } 产品2:

PHP设计模式笔记三:三种基本设计模式(工厂模式、单例模式、注册树模式) -- Rango韩老师 http://www.imooc.com/learn/236

一.工厂设计模式 index.php $db = IMooc\Factory::createDatabase(); 使用工厂类的静态方法直接创建一个dababase对象,当类名发生修改时,在工厂里修改即可. IMooc/Factory.php 二.单例设计模式 保证在整个脚本运行期间,只有一个对象的实例,比如数据库操纵对象 Database.php Factory.php index.php output同一个对象: object(IMooc\Database)#1 (0) { } object

Spring 实现两种设计模式:工厂模式和单态模式

在Spring 中大量使用的以下两种设计模式:工厂模式和单态模式. 工厂模式可将Java 对象的调用者从被调用者的实现逻辑中分离出来,调用者只需关心被调用者必须满足的规则(接口) ,而不必关心实例的具体实现过程.这是面向接口编程的优势,能提高程序的解耦,避免所有的类以硬编码方式耦合在一起. 如果所有的类直接耦合,极易形成"骨牌效应",假如B 类调用了A 类,一旦A 类需要修改,则B 类也需要修改:假如C 类调用了B 类,则C 类也需要修改......依次类推,从而导致整个系统都需要改写

[设计模式]两种方法实现简单工厂模式

<!--完整代码下载链接:点击下载完整代码示例--> 1.描述 在项目开发中经常会遇到根据不同的条件创建不同的对象,然后对该对象进行操作,一般都包括许多的switch -case分支如下: CBase* pBase(NULL); switch (type_variable) { case obj1: pBase = new CBaseDerivate1();break; case obj2: pBase = new CBaseDerivate2();break; ... case objN:

设计模式- 简单工厂模式、工厂方法模式及其比较

简单工厂模式及实例 前言工大有许多同学是做java的,大家都知道java最大的优点是它的完全OO化和它在多年的发展过程中吸收和总结了许多先进的框架与模式,其中工厂模式就是最常用的模式之一.下面我想将我在学习和实践过程中对工厂模式的认识与了解介绍给大家.由于笔者能力限制,在实践中也没参与过什么大的项目,笔者参与过的项目用到的工厂模式主要是简单工厂模式(Simple Factory)和工厂方法模式(Factory Method),所以笔者在本文主要介绍的是这两种模式.准备知识在OO设计领域,我们知道

Java研究之学习设计模式-简单工厂模式详解

 简介: 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例. 类图: 从UML类图中,可以看出,简单工厂模式的意思,就是把一个类内部,需要生成的部分,提取出来,变为一个工厂,通过工厂来new对象. 假设我们要吃苹果了,我们可以在代码中new一个苹果出来:当我们需要吃香蕉了,我们在代码中new一个香蕉出来.这种做法你会不会觉得麻烦

Android设计模式——抽象工厂模式(Abstract Factory)

二十三种设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 1 package com.example.main; 2 3 import android.app.Activity; 4 import

php设计模式——抽象工厂模式(Abstract Factory)

二十三种设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 1 <?php 2 /* 3 * php设计模式——抽象工厂模式(Abstract Factory) 4 */ 5 6 7 /* 8 * I