您所在的位置: 首页>>开发>>架构&设计>>

SCA软件架构设计理念分析(5)

http://developer.51cto.com  2007-11-13 15:55  李俊杰  Csdn博客  我要评论(0)
  • 摘要:SCA (Service Component Architecture) 是一个开发SOA(Service-Oriented Architecture)面向服务应用的简单模型规范,它描述用于使用SOA构建应用程序和系统的模型。本文仅仅涉及插件式设计模式及工厂模式的深化和发展。
  • 标签:SCA  软件  架构  设计  理念

精巧的设计

QName name = source.getName();
StAXArtifactProcessor<?> processor =

(StAXArtifactProcessor<?>)processors.getProcessor(name);

再看QName来自于何方神圣,在我们开发的例子程序中有Calculator.composite配置文件:

<component name="CalculatorServiceComponent">
<implementation.java class="calculator.CalculatorServiceImpl"/>

上面的QName的localPart属性就是“component”,“implementation.java”,而这个QName是在读Calculator.composite文件时产生的,根据这个QName,我们就能找到要处理这个tag的类。如当读到“implementation.java”的QName,根据QName作为key值就在HashMap中找到JavaImplementationProcessor ,然后由JavaImplementationProcessor来处理。

“implementation.java“-〉JavaImplementationProcessor,多么令人拍案叫绝的设计啊!

(4)JDK 泛型在工厂模式中的应用

Tuscany是基于JDK1.5的开发出来的,其中大量使用了泛型等新特性,下面简单地介绍泛型在工厂模式中的应用。

泛型基础知识

泛型增加可读性和稳定性,如果说继承实现了子类型的多态的话,那么泛型则是实现了参数的多态,两者都是抽象机制的重要组成部分,两者能够在一定程度上相互替代,编译器会帮助你检查类型,保证类型安全。继承和泛型是两种方向上的重用技术,继承提供的是类型的纵向扩展,而泛型提供的是类型的横向抽象。两种技术都能够提供优秀的重用性。

在JDK1.4时,只能用继承,可以覆写接口或父类的方法,但注意如果覆写这些方法,必须按照接口或者父类的方法写(不论是参数类型系列,还是返回类型都必须和接口或父类保持完全一致),这样就限制了我们的发挥,呵呵!还是举个例子吧!

public interface Employee {
public String getName();
}
// Employee接口实现类1
public class EmployeeImpl implements Employee{
public String getName()
{
return "employee";
}
}

// Employee接口实现类2

public class DepartmentLeader implements Employee{
public String getName()
{
return "leader";
}
}

//Employee工厂接口

public interface EmployeeFactory {
public Employee CreateEmployee(String employeeType);
}

//Employee工厂接口实现类

public class EmployeeFactoryImpl implements EmployeeFactory{
public Employee CreateEmployee(String employeeType)
{
Employee employee = null;
if(employeeType.equalsIgnoreCase("employee"))
{
employee = new EmployeeImpl();
}

else if(employeeType.equalsIgnoreCase("employee"))
{
employee = new DepartmentLeader();
}
return employee;
}
}

我们再来看使用泛型的写法,父类或接口中定义了泛型约束,只要求这个“e”是Employee的子类即可,下面的两个实现类可以清楚地看到实现接口方法的返回类型不同了,但返回类型都是Employee的子类。

//使用泛型的Employee工厂接口

public interface EmployeeFactoryByGeneric<e extends Employee> {
public e createEmployee();
}

//使用泛型的DepartmentLeader工厂实现

public class DepartmentLeaderFactory implements EmployeeFactoryByGeneric<DepartmentLeader>{
public DepartmentLeader createEmployee()
{
return new DepartmentLeader();
}
}

//使用泛型的Employee工厂实现

public class EmployeeFactoryImplByGeneric implements EmployeeFactoryByGeneric<EmployeeImpl> {
public EmployeeImpl createEmployee()
{
return new EmployeeImpl();
}
}

这样有什么好处呢?让我们来看看如何调用的。可以看出调用方面没有什么大的区别。

JDK1.4的做法

EmployeeFactory factory = new EmployeeFactoryImpl();
Employee leader =  factory.createEmployee("leader");
leader.getName();

使用泛型的做法:

EmployeeFactoryByGeneric factoryByGeneric = new DepartmentLeaderFactory();
Employee employee =  factoryByGeneric.createEmployee();
employee.getName();


共6页: 上一页 [1] [2] [3] [4] 5 [6] 下一页
【内容导航】
 第 1 页:SCA规范基础知识  第 2 页:Tuscany SCA软件架构设计思想
 第 3 页:ctory调用及代理模式实现的延迟加载功能  第 4 页:更复杂的工厂模式
 第 5 页:精巧的设计  第 6 页:Tuscany中工厂设计中涉及泛型的应用
网吧管理软件
Oracle较真SAP-商业管理软件之战一触即发
玩转Vista上的杀毒软件
全面解构SOA技术理念
杀毒软件优化和使用技巧
 
 验证码: (点击刷新验证码)   匿名发表
  • Visual C++ 完全自学宝典

  • 作者:强锋科技,朱洪波
  • Visual C++ 6.0是微软公司为程序人员提供的Visual Studio 6.0工具套件中的重要组成部分。本书由浅入深地介绍使用Visual C++ 6.0..
Copyright©2005-2008 51CTO.COM 版权所有