工厂方法模式--简单工厂模式--抽象工厂模式

1.工厂方法模式。定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法是一个类的实例化延迟到其子类。

工厂方法模式类结构图:

实现:

<?php
//抽象产品类
abstract class AbstractProduct{
    //共有的方法
    public function common(){

    }
    public abstract function behavior();
}
//具体产品类
class ConcreteProduct1 extends AbstractProduct{
    public function behavior(){
        echo "doing what product1 should do!\n";
    }
}
class ConcreteProduct2 extends AbstractProduct{
    public function behavior(){
        echo "I just doing what product2 should do!\n";
    }
}

//抽象工厂类
abstract class AbstractCreator{
    public abstract function createProduct($productname);
}
//具体工厂类
class ConcreteCreate extends AbstractCreator{
    public function createProduct($productname){
        try{
            $product = new ReflectionClass($productname);
            $instance = $product->newInstanceArgs();
            //$instance->behavior();
            return $instance;
        }catch(LogicException $e){
           die("Not gonna make it in here...\n");
        }catch(ReflectionException $e){
           die("Your class does not exist!\n");
        }
    }
}
//场景类
class Client{
    public function gene(){
        $creator = new ConcreteCreate();
        $product1 = $creator->createProduct("ConcreteProduct1");
        $product1->behavior();
        $product2 = $creator->createProduct("ConcreteProduct2");
        $product2->behavior();
    }
}

Client::gene();

2.简单工厂模式。又叫做静态工厂方法(Static Factory Method)模式。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。

  简单工厂模式类结构图:

实现代码,只在工厂方法模式做小的修改即可。

<?php
//抽象产品类
abstract class AbstractProduct{
    //共有的方法
    public function common(){

    }
    public abstract function behavior();
}
//具体产品类
class ConcreteProduct1 extends AbstractProduct{
    public function behavior(){
        echo "doing what product1 should do!\n";
    }
}
class ConcreteProduct2 extends AbstractProduct{
    public function behavior(){
        echo "I just doing what product2 should do!\n";
    }
}

//简单工厂类
class simpleCreator{
    public function createProduct($productname){
        try{
            $product = new ReflectionClass($productname);
            $instance = $product->newInstanceArgs();
            //$instance->behavior();
            return $instance;
        }catch(LogicException $e){
           die("Not gonna make it in here...\n");
        }catch(ReflectionException $e){
           die("Your class does not exist!\n");
        }
    }
}
//场景类
class Client{
    public function gene(){
        $creator = new simpleCreator();
        $product1 = $creator->createProduct("ConcreteProduct1");
        $product1->behavior();
        $product2 = $creator->createProduct("ConcreteProduct2");
        $product2->behavior();
    }
}

Client::gene();

  

3.抽象工厂模式。为创建一组相关或相互依赖的对象提供一个接口,而且无须指定它们的具体类。

php代码实现:

<?php
//抽象产品类A
abstract class AbstractProductA{
    //共有的方法
    public function common(){

    }
    public abstract function behavior();
}
//具体产品类A
class ConcreteProductA1 extends AbstractProductA{
    public function behavior(){
        echo "doing what product1 should do!\n";
    }
}
class ConcreteProductA2 extends AbstractProductA{
    public function behavior(){
        echo "I just doing what product2 should do!\n";
    }
}

//抽象产品类B
abstract class AbstractProductB{
    //共有的方法
    public function common(){

    }
    public abstract function bdosomething();
}
//具体产品类B
class ConcreteProductB1 extends AbstractProductB{
    public function bdosomething(){
        echo "b....1!\n";
    }
}
class ConcreteProductB2 extends AbstractProductB{
    public function bdosomething(){
        echo "b......2!\n";
    }
}
//抽象工厂类
abstract class AbstractCreator{
    public abstract function createProductA();
    public abstract function createProductB();
}
//具体工厂类
class ConcreteCreator1 extends AbstractCreator{
    public function createProductA(){
            return (new ConcreteProductA1());
    }
    public function createProductB(){
            return (new ConcreteProductB1());
    }
}
class ConcreteCreator2 extends AbstractCreator{
    public function createProductA(){
            return (new ConcreteProductA2());
    }
    public function createProductB(){
            return (new ConcreteProductB2());
    }
}
//场景类
class Client{
    public function gene(){
        $creator1 = new ConcreteCreator1();
        $productA1 = $creator1->createProductA();
        $productB1 = $creator1->createProductB();
        $creator2 = new ConcreteCreator2();
        $productA2 = $creator2->createProductA();
        $productB2 = $creator2->createProductB();
        $productB2->bdosomething();
    }
}

Client::gene();

  

时间: 2024-10-27 13:12:53

工厂方法模式--简单工厂模式--抽象工厂模式的相关文章

浅析 抽象工厂、工厂方法、简单(静态)工厂

----简单工厂 (也叫静态工厂模式):一个抽象产品抽象出多个具体产品类,一个具体工厂类 代码: //抽象产品角色 public interface Car{ public void drive(); } //具体产品角色 public class Benz implements Car{ public void drive() { System.out.println("Driving Benz "); } } public class Bmw implements Car{ pub

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

一.工厂模式(Factory):通过让子类决定该创建的对象是什么,来达到将对象创建的过程封装的目的,工厂方法让类的实例化推迟到子类 (1)涉及角色:抽象产品,具体产品,抽象创建者,具体创建者.                (2)实例:    抽象产品类 1 public abstract class ProductNoodle { 2 public abstract String description(); 3 } 具体产品类 1 public class ConcreteNoodleA e

iOS设计模式——工厂方法(简单工厂模式,工厂方法模式, 抽象工厂模式)

1. 简单工厂模式 如何理解简单工厂,工厂方法, 抽象工厂三种设计模式? 简单工厂的生活场景,卖早点的小摊贩,他给你提供包子,馒头,地沟油烙的煎饼等,小贩是一个工厂,它生产包子,馒头,地沟油烙的煎饼.该场景对应的UML图如下所示: 图1:简单工厂模式UML图 简单工厂模式的参与者: 工厂(Factory)角色:接受客户端的请求,通过请求负责创建相应的产品对象. 抽象产品(Abstract Product)角色: 是工厂模式所创建对象的父类或是共同拥有的接口.可是抽象类或接口. 具体产品(Conc

iOS常用设计模式——工厂方法(简单工厂模式,工厂方法模式, 抽象工厂模式)

1. 简单工厂模式 如何理解简单工厂,工厂方法, 抽象工厂三种设计模式? 简单工厂方法包含:父类拥有共同基础接口,具体子类实现子类特殊功能,工厂类根据参数区分创建不同子类实例.该场景对应的UML图如下所示: 代码结构如下 Animal 类 @interface Animal :NSObject @proterty(nonatomic,strong) NSString *name; -(void)laugh; @end Dog类 @interface Dog:Animal @end Cat类 @i

iOS经常使用设计模式——工厂方法(简单工厂模式,工厂方法模式, 抽象工厂模式)

1. 简单工厂模式 怎样理解简单工厂,工厂方法. 抽象工厂三种设计模式? 简单工厂的生活场景.卖早点的小摊贩.他给你提供包子,馒头,地沟油烙的煎饼等,小贩是一个工厂.它生产包子,馒头,地沟油烙的煎饼. 该场景相应的UML图例如以下所看到的: 图1:简单工厂模式UML图 简单工厂模式的參与者: 工厂(Factory)角色:接受client的请求,通过请求负责创建对应的产品对象. 抽象产品(Abstract Product)角色:是工厂模式所创建对象的父类或是共有的接口.但是抽象类或接口. 详细产品

终极版:由简单工厂模式,升级到抽象工厂模式(用到反射)

前面两个已经学习简单三层到简单工厂模式的变化,但是简单工厂模式还是有个缺点,就是简单工厂中集合了所有的实例的创建.也不是很好. 现在想到使用抽象工厂的方式来实现这个: 我们在程序集中加上下面的代码: <appSettings> <!--命名空间--> <add key="DALNameSpace" value="DAL"/> <!--程序集--> <add key="DALAssembly"

设计模式可复用面向对象软件设计基础之对象创建型模式—ABSTRACT FACTORY( 抽象工厂)

意图 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 适用性 在以下情况可以使用 Abstract Factory模式 ? 一个系统要独立于它的产品的创建.组合和表示时. ? 一个系统要由多个产品系列中的一个来配置时. ? 当你要强调一系列相关的产品对象的设计以便进行联合使用时. ? 当你提供一个产品类库,而只想显示它们的接口而不是实现时. 结构 模式结构图如下所示: Creator: 声明一个创建抽象产品对象的操作接口. ConcreteCreator:(Concrete

java进阶之工厂模式(二)抽象工厂模式

public interface KitchenFactory{ //抽象工厂 public Food getFood(); 抽象方法 public TableWare getTableWare(); } public interface Food{ //抽象食物 public String getFoodName(); } public interface TableWare{ public String getToolName(); //抽象餐具 } public class AKitche

简单工厂、工厂方法、抽象工厂、策略模式、策略与工厂的区别

结合简单示例和UML图,讲解工厂模式简单原理. 一.引子 话说十年前,有一个爆发户,他家有三辆汽车(Benz(奔驰).Bmw(宝马).Audi(奥迪)),还雇了司机为他开车.不过,爆发户坐车时总是这样:上Benz车后跟司机说"开奔驰车!",坐上Bmw后他说"开宝马车!",坐上 Audi后他说"开奥迪车!".你一定说:这人有病!直接说开车不就行了?!而当把这个爆发户的行为放到我们程序语言中来,我们发现C语言一直是通过这种方式来坐车的!幸运的是这种有

设计模式之_简单工厂模式、工厂方法模式、抽象工厂模式 、策略模式、策略与工厂的区别(转)

一.前言 话说十年前,有一个爆发户,他家有三辆汽车(Benz(奔驰).Bmw(宝马).Audi(奥迪)),还雇了司机为他开车.不过,爆发户坐车时总是这样:上Benz车后跟司机说“开奔驰车!”,坐上Bmw后他说“开宝马车!”,坐上 Audi后他说“开奥迪车!”.你一定说:这人有病!直接说开车不就行了?!而当把这个爆发户的行为放到我们程序语言中来,我们发现C语言一直是通过这种方式来坐车的 幸运的是这种有病的现象在OO语言中可以避免了.下面以Java语言为基础来引入我们本文的主题:工厂模式! 二.简介