码迷,mamicode.com
首页 > 其他好文 > 详细

合成模式 composite

时间:2016-04-07 01:12:40      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:

典型例子: 管道过滤器。

下面是一个例子,不贴合实际,但是用到了 合成模式。

1 public interface SalaryComputer {
2     public int computer(int m, int n);
3 }
1 public class Add implements SalaryComputer {
2     @Override
3     public int computer(int m, int n) {
4         System.out.println(m + "+" + n);
5         return m + n;
6     }
7 }
1 public class Sub implements SalaryComputer {
2    @Override
3    public int computer(int m, int n) {
4        System.out.println(m+"-"+n);
5       return m-n;
6    }
7 }
 1 public class Composite implements SalaryComputer {
 2     private List<SalaryComputer> list;
 3 
 4     public Composite() {
 5         list = new ArrayList<SalaryComputer>();
 6     }
 7 
 8     public void add(SalaryComputer salaryComputer) {
 9         list.add(salaryComputer);
10     }
11 
12     public void remove(SalaryComputer salaryComputer) {
13         list.remove(salaryComputer);
14     }
15 
16     @Override
17     public int computer(int m, int n) {
18         int count = 0;
19         for (int i = 0; i < list.size(); i++) {
20             SalaryComputer salaryComputer = list.get(i);
21             count += salaryComputer.computer(m, n);
22             System.out.println(count);
23 
24         }
25         System.out.println(count);
26 
27         return count;
28     }
29 
30 }
 1 public class Client {
 2 
 3     public static void main(String[] args) {
 4        
 5         Composite salaryComputer = new Composite();
 6         salaryComputer.add(new Add());
 7         salaryComputer.add(new Sub());
 8         salaryComputer.computer(1000, 2);
 9 
10     }
11 
12 }

补充:

定义接口  interface A

定义类 class B implements A

Client:

A a = new B();

如果 A,和 B 中有同名 成员变量(值不同) , 此时 a 中 实际有 两个 同名 的 成员变量。  a.成员变量  实际调用的 是继承 的值,a.方法  调用的 是 B 中的方法。

抽象类类似。

这是Client.java 中 不用  SalaryComputer salaryComputer = new Compoiste() ; 的原因。

合成模式 composite

标签:

原文地址:http://www.cnblogs.com/ChuangZhang/p/5361686.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!