合成模式 composite

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了合成模式 composite相关的知识,希望对你有一定的参考价值。

典型例子: 管道过滤器。

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

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的主要内容,如果未能解决你的问题,请参考以下文章

使用绑定从片段访问父活动的 UI 元素

设计模式软件设计七大原则 ( 合成复用原则 | 代码示例 )

手把手:使用OpenCV进行面部合成— C++ / Python

[设计模式]合成复用原则

用于从 cloudkit 检索单列的代码模式/片段

go语言设计模式-合成复用原则