Liny_@NotePad

沉迷ACG中

几个UML模型的Java实现..(1)

YOYO posted @ 2009年4月07日 17:00 in 【OOA/D】 with tags UML , 2772 阅读

图中所示的分别是关联、组合、聚合……
下面是Java代码:
[Component.java]

  1. public class Component {
  2.  
  3.     public void Operation(){
  4.        
  5.     }
  6.    
  7.     public void Add(Component component){
  8.        
  9.     }
  10.    
  11.     public void Remove(Component component){
  12.        
  13.     }
  14.    
  15.     public Component getChild(int i){
  16.         return new Component();
  17.     }
  18.    
  19. }

  [Client.java]
Client类与Component的关系是实线箭头,表关联。
A类关联B类一般表现为在A类中有类型为B类的属性。
如果是虚线则表示依赖,一般表现为A类中的方法有B类的参数或B类的返回值(参数引用),或在A类的方法中存在局部变量类型为B(局部变量引用)。

 

  1. public class Client {
  2.    
  3.     Component component;
  4.  
  5.     public Component getComponent() {
  6.         return component;
  7.     }
  8.  
  9.     public void setComponent(Component component) {
  10.         this.component = component;
  11.     }
  12.  
  13. }

[Leaf.java]
该类有一条实心箭头连向Component,表继承,即Leaf继承了Component类,这个比较好理解;

  1. public class Leaf extends Component {
  2.  
  3.     @Override
  4.     public void Operation() {
  5.         super.Operation();
  6.     }
  7.  
  8. }

[Composite.java]
该类有两条线连向Component,
一条是实心箭头,表继承,即该类与Leaf类一样继承了Component类;
另一条则是空心菱形,表聚合,
聚合和组合都是关联的一种,因此都会在类中存在Component的属性,
但是聚合时,该属性不一定有具体对象,
而组合时该属性所指向的Component对象一定与该Composite对象生命周期相同,即同时new同时销毁。
这里是聚合关系,而且该关系中Component还有标记0..*,表明一个Composite对象可以拥有任意多个Component对象,
因此我们新建一个List用来存放Component。

  1. import java.util.*;
  2.  
  3. public class Composite extends Component {
  4.    
  5.     private List<Component> componentList = new ArrayList<Component>();
  6.  
  7.     @Override
  8.     public void Add(Component component) {
  9.         // TODO Auto-generated method stub
  10.         super.Add(component);
  11.     }
  12.  
  13.     @Override
  14.     public Component getChild(int i) {
  15.         // TODO Auto-generated method stub
  16.         return super.getChild(i);
  17.     }
  18.  
  19.     @Override
  20.     public void Operation() {
  21.         // TODO Auto-generated method stub
  22.         super.Operation();
  23.     }
  24.  
  25.     @Override
  26.     public void Remove(Component component) {
  27.         // TODO Auto-generated method stub
  28.         super.Remove(component);
  29.     }
  30.  
  31. }

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter