第七个设计模式:抽象工厂

第七个设计模式:抽象工厂

工厂方法解决了一个产品等级结构的创建,那抽象工厂则是解决多个产品等级结构的创建方案.是更为抽象的方案.

UML示意图:

组成部分:

1.       抽象工厂

2.       具体工厂

3.       抽象产品

4.       具体产品

代码例子:

1.       抽象工厂

package com.eekq.creator.abstractfactory;

 

public interface Creator {

    public ProductA factoryA();

    public ProductB factoryB();

}

2.       抽象产品

package com.eekq.creator.abstractfactory;

 

public interface ProductA {

    //业务方法

    public void doWorkA();

}

 

package com.eekq.creator.abstractfactory;

 

public interface ProductB {

    //业务方法

    public void doWorkB();

}

 

3.       具体工厂

package com.eekq.creator.abstractfactory.impl;

 

import com.eekq.creator.abstractfactory.Creator;

import com.eekq.creator.abstractfactory.ProductA;

import com.eekq.creator.abstractfactory.ProductB;

 

public class ConcreteCreator1 implements Creator {

 

    public ProductA factoryA() {

       return new ProductA1();

    }

 

    public ProductB factoryB() {

       return new ProductB1();

    }

 

}

package com.eekq.creator.abstractfactory.impl;

 

import com.eekq.creator.abstractfactory.Creator;

import com.eekq.creator.abstractfactory.ProductA;

import com.eekq.creator.abstractfactory.ProductB;

 

public class ConcreteCreator2 implements Creator {

 

    public ProductA factoryA() {

       return new ProductA2();

    }

 

    public ProductB factoryB() {

       return new ProductB2();

    }

 

}

4.       具体产品

package com.eekq.creator.abstractfactory.impl;

 

import com.eekq.creator.abstractfactory.ProductA;

 

public class ProductA1 implements ProductA {

 

    public void doWorkA() {

       System.out.println("ProductA1.doWorkA()");

    }

 

}

package com.eekq.creator.abstractfactory.impl;

 

import com.eekq.creator.abstractfactory.ProductA;

 

public class ProductA2 implements ProductA {

 

    public void doWorkA() {

       System.out.println("ProductA2.doWorkA()");

    }

 

}

package com.eekq.creator.abstractfactory.impl;

 

import com.eekq.creator.abstractfactory.ProductB;

 

public class ProductB1 implements ProductB {

 

    public void doWorkB() {

       System.out.println("ProductB1.doWorkB()");

    }

 

}

package com.eekq.creator.abstractfactory.impl;

 

import com.eekq.creator.abstractfactory.ProductB;

 

public class ProductB2 implements ProductB {

 

    public void doWorkB() {

       System.out.println("ProductB2.doWorkB()");

    }

 

}

5.客户端的调用

package com.eekq.creator.abstractfactory;

 

import com.eekq.creator.abstractfactory.impl.ConcreteCreator1;

import com.eekq.creator.abstractfactory.impl.ConcreteCreator2;

 

public class Client {

 

    public static void main(String[] args) {

       Creator c1 = new ConcreteCreator1();

       Creator c2 = new ConcreteCreator2();

       ProductA a1 = c1.factoryA();

       ProductA a2 = c2.factoryA();

       ProductB b1 = c1.factoryB();

       ProductB b2 = c2.factoryB();

       a1.doWorkA();

       a2.doWorkA();

       b1.doWorkB();

       b2.doWorkB();

    }

 

}

6. 输出结果

ProductA1.doWorkA()

ProductA2.doWorkA()

ProductB1.doWorkB()

ProductB2.doWorkB()

7.总结

抽象工厂是工厂方法的一种扩充,同样有着工厂方法的优点.工厂方法每个具体工厂对应一个具体产品,而抽象工厂则对应同一产品等级中的多个具体产品.前提条件是预先设计好产品的等级结构.

作者:飞行鱼 QQ6868861 推荐J2EE群:7715552

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值