博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AspectJ实现设计模式(四)——抽象工厂模式 (转)
阅读量:2498 次
发布时间:2019-05-11

本文共 2533 字,大约阅读时间需要 8 分钟。

AspectJ实现设计模式(四)——抽象工厂模式 (转)[@more@]

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

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

2003-7-172122120.jpg" align=baseline border=0>

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

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

AbstractFactoryAspect.

public aspect AbstractFactoryAspect{

  public 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保留版权,如果需要转贴请写明作者和出处。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10748419/viewspace-959362/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10748419/viewspace-959362/

你可能感兴趣的文章
python3安装scrapy
查看>>
python正则表达式入门一
查看>>
python正则表达式入门二
查看>>
scrapy运行
查看>>
XPATH入门
查看>>
python爬虫 CSS选择器
查看>>
正常关闭java程序
查看>>
查看linux核心数
查看>>
数据结构与算法三: 数组
查看>>
Activiti工作流会签二 启动流程
查看>>
Activiti工作流会签三 撤销,审批,驳回
查看>>
Oauth2方式实现单点登录
查看>>
CountDownLatch源码解析加流程图详解--AQS类注释翻译
查看>>
ES相关度评分
查看>>
我们一起做一个可以商用的springboot脚手架
查看>>
idea在搭建ssm框架时mybatis整合问题 无法找到mapper
查看>>
PHP empty、isset、innull的区别
查看>>
apache+nginx 实现动静分离
查看>>
通过Navicat远程连接MySQL配置
查看>>
phpstorm开发工具的设置用法
查看>>