php,java实现抽象工厂模式

本文深入解析了抽象工厂模式的概念及其实现方式,通过具体的Java和PHP代码示例展示了如何使用抽象工厂模式创建不同业务品种的不同业务分类。文章还介绍了如何通过不同的工厂类实例化特定类型的产品对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概念理解

抽象工厂模式:生产出不同业务品种的不同业务分类,强调的是每个不同品种下的分类,而他的生产类中是按照业务分类来区别的,就像《设计模式之禅》举的例子,有奔驰车和宝马车,这个车强调的就是业务品种,要生产车门(车门就是业务分类),但是车门分为左侧车门个右侧车门。估计看到这个定义会不太理解,但通过阅读代码在回头看,就会很好理解。

类图

这里写图片描述

代码实现

1.java
产品A抽象类

public abstract class AbsProductA {

    public void commonFunction(){}

    public abstract void doSomething();
}

产品B抽象类

public abstract class AbsProductB {
    public void commonFunction(){}

    public abstract void doSomething();
}

A产品分类1实现类

public class ProductA1 extends AbsProductA {
    @Override
    public void doSomething() {
        System.out.print("A1");
    }
}

A产品分类2实现类

public class ProductA2 extends AbsProductA {
    @Override
    public void doSomething() {
        System.out.print("A2");
    }
}

B产品分类1实现类

public class ProductB1 extends AbsProductB{
    @Override
    public void doSomething() {
        System.out.print("B1");
    }
}

B产品分类2实现类

public class ProductB2 extends AbsProductB{
    @Override
    public void doSomething() {
        System.out.print("B2");
    }
}

工厂抽象类

public abstract class AbsCreater {

    public abstract AbsProductA createProductA();

    public abstract AbsProductB createPriductB();

}

分类1工厂类

public class Creater1 extends AbsCreater {
    @Override
    public AbsProductA createProductA() {
        return new ProductA1();
    }

    @Override
    public AbsProductB createPriductB() {
        return new ProductB1();
    }
}

分类2工厂类

public class Creater2 extends AbsCreater {

    @Override
    public AbsProductA createProductA() {
        return new ProductA2();
    }

    @Override
    public AbsProductB createPriductB() {
        return new ProductB2();
    }
}

2.php

abstract class AbsProductA
{
    public function commomFunction(){}

    public abstract function doSomething();
}

abstract class AbsProductB
{
    public function commonFunction(){}

    public abstract function doSomething();
}

class ProductA1 extends AbsProductA
{
    public function doSomething()
    {
        echo 'A1';
    }
}

class ProductA2 extends AbsProductA
{
    public function doSomething()
    {
        echo 'A2';
    }
}

class ProductB1 extends AbsProductB
{
    public function doSomething()
    {
        echo 'B1';
    }
}

class ProductB2 extends AbsProductB
{
    public function doSomething()
    {
        echo 'B2';
    }
}

abstract class AbsCreater
{
    public abstract function createA();

    public abstract function createB();
}

class Creater1 extends AbsCreater
{
    public function createA()
    {
        return new ProductA1();
    }

    public function createB()
    {
        return new ProductB1();
    }
}

class Creater2 extends AbsCreater
{
    public function createA()
    {
        return new ProductA2();
    }

    public function createB()
    {
        return new ProductB2();
    }
}

$creater1 = new Creater1();
$creater1->createA()->doSomething();
$creater1->createB()->doSomething();

$creater2 = new Creater2();
$creater2->createA()->doSomething();
$creater2->createB()->doSomething();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值