AspectJ实现设计模式(四)——抽象工厂模式

原创 2003年07月22日 08:00:00

    本文介绍使用AspectJ实现设计模式之抽象工厂模式,文章以IT产品生产的例子形式描述了抽象工厂模式AspectJ版本的参考实现。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

    抽象工厂模式是对象的创建模式,它是工厂方法的进一步推广。它为客户提供一个接口,使得客户不必在意产品类型的情况下,创建多个产品族中的产品对象。模式的简易UML图例如下

现在将工厂的创建方法交由一个具体的抽象工厂方面来处理,从而具体的工厂类不需要知道需要实现哪个抽象工厂,也不必了解产品的创建逻辑。本文的例子系统的UML图如下所示

抽象工厂方面使用Inter-type声明为工厂类声明了需实现的抽象工厂接口并根据捕捉到的创建方法调用,实施具体的创建逻辑。

AbstractFactoryAspect.java

public aspect AbstractFactoryAspect{

  public Cpu ComputerProducer.createCpu(){
    return null;
  }
  public Ram ComputerProducer.createRam(){
    return null;
  }

  declare parents : MacProducer implements ComputerProducer;
  declare parents : PcProducer implements ComputerProducer;

  //捕捉Cpu产品族的创建

  Cpu around(ComputerProducer producer) : target(producer)
      && call(Cpu ComputerProducer+.createCpu()){
    return chooseCpuProducer(producer);
  }

  //捕捉Ram产品族的创建

  Ram around(ComputerProducer producer) : target(producer)
      && call(Ram ComputerProducer+.createRam()){
    return chooseRamProducer(producer);
  }

  //选择不同的工厂类

  private Cpu chooseCpuProducer(ComputerProducer producer){
    if(producer instanceof MacProducer){
      return new MacCpu();
    }
    else if(producer instanceof PcProducer){
      return new PcCpu();
    }
    else{
      throw new RuntimeException("No such kind of producer");
    }
  }

  private Ram chooseRamProducer(ComputerProducer producer){
    if(producer instanceof MacProducer){
      return new MacRam();
    }
    else if(producer instanceof PcProducer){
      return new PcRam();
    }
    else{
      throw new RuntimeException("No such kind of producer");
    }
  }
}
抽象工厂和具体工厂都很简单

public interface ComputerProducer {}

public class PcProducer {}

public class MacProducer{}

这里出于简单易懂考虑没有实现任何方法。

同样产品族类的代码只作为说明,没有实现任何功能。

public interface Cpu {}

public interface Ram{}

public class PcCpu{} 

public class MacCpu{}

public class PcRam{}

public class MacRam{}

测试代码Demo.java

public class Demo {
    public static void main(String[] args) {
      ComputerProducer producer=new PcProducer();
      System.out.println((producer.createCpu()).toString());
      System.out.println((producer.createRam()).toString());
      producer=new MacProducer();
      System.out.println((producer.createCpu()).toString());
      System.out.println((producer.createRam()).toString());

   }

}

输出的结果如下

aopabstractfactory.PcCpu

aopabstractfactory.PcRam

aopabstractfactory.MacCpu

aopabstractfactory.MacRam

至此,我已经使用AspectJ简单实现了一个使用抽象工厂模式设计的IT产品创建的例子。本系列之五将介绍如何用AspectJ实现迭代子模式。

 

声明

本文由starchu1981保留版权,如果需要转贴请写明作者和出处。

C++设计模式-抽象工厂

定义 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。   结构   理解 1.       AbstractFactory是抽象工厂类,声明创建产品族的接...
  • woods2001
  • woods2001
  • 2011年08月02日 21:03
  • 4646

大话设计模式—工厂模式

一、简介工厂模式主要是为创建对象提供了接口。工厂模式按照《Java与模式》中的提法分为三类: 简单工厂模式(Simple Factory) 工厂方法模式(Factory Method) 抽象工厂模...
  • lmb55
  • lmb55
  • 2015年05月31日 14:42
  • 1137

走穿java23种设计模式-3抽象工厂模式详解

走穿java23种设计模式-3工厂方法模式详解工厂模式可以分为:简单工厂模式,工厂方法模式,抽象工厂模式。简单工厂模式就没什么好说的了,无非是所有的东西都写在一个类里面,要什么就调用什么,如果要添加新...
  • wenzhi20102321
  • wenzhi20102321
  • 2017年10月03日 03:24
  • 722

【java设计模式】之 抽象工厂(Abstract Factory)模式

1. 女娲的失误         上一节学习了工厂模式,女娲运用了该模式成功创建了三个人种,可是问题来了,她发现没有性别……这失误也忒大了点吧……竟然没有性别,那岂不是……无奈,只好抹掉重来了,于是所...
  • eson_15
  • eson_15
  • 2016年04月26日 23:49
  • 11609

【C#设计模式-抽象工厂模式】

抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。 抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,...
  • heyangyi_19940703
  • heyangyi_19940703
  • 2016年04月20日 13:04
  • 1978

大话设计模式C++实现-第15章-抽象工厂模式

一、UML图 二、包含的角色 (1)抽象工厂 (2)具体工厂:包括具体工厂1和具体工厂2。具体工厂1用于生产具体产品A1和具体产品B1,具体工厂2用于生产具体产品A2和具体产品B2; (3)抽象产...
  • XD_lixin
  • XD_lixin
  • 2014年11月16日 23:09
  • 1610

设计模式——抽象工厂模式详解

0.前言写在最前面,本人的设计模式类博文,建议先看博文前半部分的理论介绍,再看后半部分的实例分析,最后再返回来复习一遍理论介绍,这时候你就会发现我在重点处标红的用心,对于帮助你理解设计模式有奇效哦~无...
  • SEU_Calvin
  • SEU_Calvin
  • 2016年08月21日 17:05
  • 10475

Java设计模式—工厂方法模式&抽象工厂模式

工厂方法模式与抽象工厂模式都是设计模式中重要而且常见的模式。 通用类图如下:         在工厂方法模式中,抽象产品类Product负责定义产品的共性,实现对事物最抽象的定义;C...
  • qq_25827845
  • qq_25827845
  • 2016年09月11日 15:07
  • 4686

<十一>读<<大话设计模式>>之抽象工厂模式

学习设计模式有一段时间了,对设计模式有一个体会,就是没那么难,就是设计程序遵循一些原则,让代码可复用,在修改的时候不用涉及太多的类,扩展方便,抽象工厂模式名字听起来抽象,但理解起来一点也不抽象,用语言...
  • jzhf2012
  • jzhf2012
  • 2014年11月04日 14:14
  • 1723

C# 设计模式 之 抽象工厂模式

        工厂方法模式在于需要根据条件来控制对哪个类进行实例化,而抽象工厂模式确定实例化的往往设计到多个类,目的是创建一组相关或者相互依赖的对象提供支持!重点就是在于处理一组相关或者相互依赖类!...
  • scucj
  • scucj
  • 2007年09月23日 01:12
  • 2780
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:AspectJ实现设计模式(四)——抽象工厂模式
举报原因:
原因补充:

(最多只允许输入30个字)