`
leeskyer
  • 浏览: 8199 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Composite 模式初探

    博客分类:
  • JAVA
阅读更多
Composite作为设计模式结构化模式的一种,有效的使得原本一组分离的组件可以随意的进行有机的结合,然后通过开发公用接口方便外部调用
以下是个人理解后的一个案例
随着人们对银行个人理财的重视,越来越多的人会去银行进行个人理财,而个人理财的形式也分门别类,人们会把不同类型理财产品的捆绑在一起进行投资,以便减少风险,还可以对多个捆绑的综合产品进行投资以进一步在保持本金安全的前提下,扩大投资的回报率。
customer类模拟银行理财行为
package com.lee.composite;

public class Customer {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("客户去银行理财");
		FinanceProductsComposite f = new FinanceProductsComposite();
		StockALeaf sa = new StockALeaf();
		StockALeaf saa = new StockALeaf();
		StockBLeaf sb = new StockBLeaf();
		FundALeaf fa = new FundALeaf();
		FundBLeaf fb = new FundBLeaf();
		FundBLeaf fbb = new FundBLeaf();
		StockProductsComposite spc = new StockProductsComposite();
		FundsProductsComposite fpc = new FundsProductsComposite();
		spc.addComposite(sa);
		spc.addComposite(saa);
		spc.addComposite(sb);
		fpc.addComposite(fa);
		fpc.addComposite(fb);
		fpc.addComposite(fbb);
		f.addComposite(spc);
		f.addComposite(fpc);
		System.out.println("银行给出理财方案");
		f.purchase();
		
	}

}

FinanceProductsComposite为公用接口
package com.lee.composite;

import java.util.ArrayList;
import java.util.List;

public class FinanceProductsComposite {
	List<FinanceProductsComposite> childCompositeList = new ArrayList<FinanceProductsComposite>() ;
	FinanceProductsComposite parentComposite ;
	public List<FinanceProductsComposite> getChild()
	{
		 return childCompositeList;
	}
	
	public void addComposite(FinanceProductsComposite financeProductsComposite)
	{
		childCompositeList.add(financeProductsComposite);
		financeProductsComposite.setParent(this);
	}
	
	public FinanceProductsComposite getParent()
	{
		return parentComposite;
	}
	
	private void setParent(FinanceProductsComposite financeProductsComposite)
	{
		parentComposite = financeProductsComposite;
	}
	
	public void removeComposite(FinanceProductsComposite financeProductsComposite)
	{
		childCompositeList.remove(financeProductsComposite);
		financeProductsComposite.removeParent();
	}
	
	public void removeParent()
	{
		parentComposite = null;
	}
	public void purchase()
	{
		for(FinanceProductsComposite f : childCompositeList)
		{
			f.purchase();
		}
	}
	public void sale()
	{
		for(FinanceProductsComposite f : childCompositeList)
		{
			f.purchase();
		}
	}
	
	
}

FundsProductsComposite与StockProductsComposite为两大产品组合
package com.lee.composite;

public class FundsProductsComposite extends FinanceProductsComposite
{

}
package com.lee.composite;

public class StockProductsComposite extends FinanceProductsComposite
{

}


其他为具体的叶节点
package com.lee.composite;

public class StockALeaf extends StockProductsComposite {
	public void purchase()
	{
		System.out.println("buy $20 stock A");
	}
	public void sale()
	{
		System.out.println("sale $20 stock A");
	}
}
package com.lee.composite;

public class FundALeaf extends FundsProductsComposite {
	public void purchase()
	{
		System.out.println("buy $20 fund A");
	}
	public void sale()
	{
		System.out.println("sale $20 fund A");
	}
}	


分享到:
评论

相关推荐

    00-初探 Laravel 和其中的设计模式(3).html

    组合模式( Composite ) 享元模式( Flyweight ) 行为型模式包含了: 策略模式( Strategy ) 模板方法模式( Template Method ) 观察者模式( Observer ) 迭代子模式( Iterator ) 责任链模式( Chain of ...

    研磨设计模式(完整带书签).part2.pdf

    中高级内容则深入探讨如何理解这些模式,包括模式中蕴涵什么样的设计思想,模式的本质是什么,模式如何结合实际应用,模式的优缺点以及与其他模式的关系等,以期让读者尽量去理解和掌握每个设计模式的精髓所在。...

    [Java设计模式(第2版)(Design.Patterns.in.Java).John.Metsker

    《java设计模式(第2版)》通过一个完整的java项目对经典著作design patterns一书介绍的23种设计模式进行了深入分析与讲解,实践性强,却又不失对模式本质的探讨。本书创造性地将这些模式分为5大类别,以充分展现各个...

    研磨设计模式(完整带书签).part1.pdf

    中高级内容则深入探讨如何理解这些模式,包括模式中蕴涵什么样的设计思想,模式的本质是什么,模式如何结合实际应用,模式的优缺点以及与其他模式的关系等,以期让读者尽量去理解和掌握每个设计模式的精髓所在。...

    研磨设计模式-part2

    中高级内容则深入探讨如何理解这些模式,包括模式中蕴涵什么样的设计思想,模式的本质是什么,模式如何结合实际应用,模式的优缺点以及与其他模式的关系等,以期让读者尽量去理解和掌握每个设计模式的精髓所在。...

    研磨设计模式-part4

    中高级内容则深入探讨如何理解这些模式,包括模式中蕴涵什么样的设计思想,模式的本质是什么,模式如何结合实际应用,模式的优缺点以及与其他模式的关系等,以期让读者尽量去理解和掌握每个设计模式的精髓所在。...

    研磨设计模式-part3

    中高级内容则深入探讨如何理解这些模式,包括模式中蕴涵什么样的设计思想,模式的本质是什么,模式如何结合实际应用,模式的优缺点以及与其他模式的关系等,以期让读者尽量去理解和掌握每个设计模式的精髓所在。...

    研磨设计模式.part3(共4个)

    中高级内容则深入探讨如何理解这些模式,包括模式中蕴涵什么样的设计思想,模式的本质是什么,模式如何结合实际应用,模式的优缺点以及与其他模式的关系等,以期让读者尽量去理解和掌握每个设计模式的精髓所在。...

    研磨设计模式.part2(共4个)

    中高级内容则深入探讨如何理解这些模式,包括模式中蕴涵什么样的设计思想,模式的本质是什么,模式如何结合实际应用,模式的优缺点以及与其他模式的关系等,以期让读者尽量去理解和掌握每个设计模式的精髓所在。...

    研磨设计模式.part4(共4个)

    中高级内容则深入探讨如何理解这些模式,包括模式中蕴涵什么样的设计思想,模式的本质是什么,模式如何结合实际应用,模式的优缺点以及与其他模式的关系等,以期让读者尽量去理解和掌握每个设计模式的精髓所在。...

    研磨设计模式.part1(共4个)

    中高级内容则深入探讨如何理解这些模式,包括模式中蕴涵什么样的设计思想,模式的本质是什么,模式如何结合实际应用,模式的优缺点以及与其他模式的关系等,以期让读者尽量去理解和掌握每个设计模式的精髓所在。...

    二十三种设计模式【PDF版】

    为能和大家能共同探讨"设计模式",我将自己在学习中的心得写下来,只是想帮助更多人更容易理解 GoF 的《设计模式》。由 于原著都是以C++为例, 以Java为例的设计模式基本又都以图形应用为例,而我们更关心Java在中间件等...

    asp.net知识库

    2分法-通用存储过程分页(top max模式)版本(性能相对之前的not in版本极大提高) 分页存储过程:排序反转分页法 优化后的通用分页存储过程 sql语句 一些Select检索高级用法 SQL server 2005中新增的排序函数及应用 ...

    五种数据虚拟化方式改进数据仓库

    本文探讨了五种整合模式,这些模式将企业数据仓库和数据虚拟化结合起来,连同来自Composite软件公司的数据虚拟化客户实例,以解决实际的业务和IT问题。一大批商业智能(BI)、预测分析、数据和内容挖掘,门户和其他...

    复合式帷幕墙防波堤消浪特性研究 (2015年)

    文章利用多领域边界元素法(Multi-domain BEM)建立一套数值模式,探讨波浪入射复合式帷幕墙式防波堤(Composite Curtainwall-Pile Breakwater,Composite CPB)消浪特性。一般传统帷幕墙防波堤(CPB)是由翼板式(curtain ...

Global site tag (gtag.js) - Google Analytics