科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道SCA软件架构设计理念分析

SCA软件架构设计理念分析

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

SCA (Service Component Architecture) 是一个开发SOA(Service-Oriented Architecture)面向服务应用的简单模型规范,它描述用于使用SOA构建应用程序和系统的模型。本文仅仅涉及插件式设计模式及工厂模式的深化和发展。

作者:李俊杰 来源:Csdn博客 2007年12月26日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共6页)

精巧的设计

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();

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章