php,java实现抽象工厂模式

来源:互联网 发布:手机电影拍摄软件 编辑:程序博客网 时间:2024/06/07 21:11

概念理解

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

类图

这里写图片描述

代码实现

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();
0 0
原创粉丝点击