`
leeskyer
  • 浏览: 8409 次
  • 性别: 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");
	}
}	


分享到:
评论

相关推荐

    C#面向对象设计模式纵横谈(9):Composite 组合模式(结构型模式)

    Composite模式的核心动机正是为了解决这一问题,通过将客户代码与复杂对象容器结构解耦,确保无论处理的是单个对象还是复合对象,都能保持一致的接口和行为。 2. **Composite模式的意图与结构** Composite模式的...

    C++设计模式课件20_Composite_组合模式.pdf

    本篇主要探讨的是结构型模式之一——组合模式。 #### 二、组合模式定义 组合模式(Composite Pattern)是一种树形结构的设计模式,它将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户可以对...

    C#面向对象设计模式纵横谈(9):Composite 组合模式(结构型模式) (Level 300)

    让我们深入探讨一下C#中的组合模式。 **一、模式定义** 组合模式将对象组织成树形结构,表示部分-整体的层次结构。它让客户以一致的方式处理单个对象和对象集合,也就是说,客户可以对单个对象和组合对象进行同样的...

    24种设计模式以及混合设计模式

    其中包括代理模式(Proxy)、装饰器模式(Decorator)、适配器模式(Adapter)、桥接模式(Bridge)、组合模式(Composite)、外观模式(Facade)和享元模式(Flyweight)。这些模式帮助我们在不修改原有代码的情况...

    impact-composite_复合材料冲击_impact_ABAQUS_composite_

    本资料包"impact-composite_复合材料冲击_impact_ABAQUS_composite_"聚焦于探讨如何利用ABAQUS对复合材料进行冲击响应分析,特别是关注设定不同初速度和固定速度条件下的影响。 复合材料是由两种或更多种具有不同...

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

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

    c#设计模式

    2. 结构型模式:这些模式处理对象组合和结构,如适配器模式(Adapter)、桥接模式(Bridge)、组合模式(Composite)、装饰器模式(Decorator)、外观模式(Facade)、享元模式(Flyweight)和代理模式(Proxy)。...

    东北大学设计模式实验3

    在Composite模式中,组件(Component)类定义了对象的行为,叶子(Leaf)类代表没有子元素的对象,而容器(Composite)类则包含其他组件或叶子,提供了一种方式来添加、删除和管理子元素。这种模式使得客户端代码...

    设计模式C++版(pdf版)

    Composite模式将对象组合成树形结构以表示“部分-整体”的层次结构。Composite模式使得用户对单个对象和组合对象的使用具有一致性。 - **适用场景**:想表示对象的部分-整体层次结构;用户不知道他所处理的对象...

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

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

    设计模式精解-GoF23种设计模式解析附C实现源码.pdf

    Composite模式允许你将对象组合成树形结构来表示“部分-整体”的层次结构,使得用户可以一致地使用单个对象和组合对象。 #### 2.5 Flyweight模式 Flyweight模式通过共享技术有效地支持大量细粒度对象,减少内存占用...

    常见设计模式的解析和实现(C++)之六

    在C++中,Composite模式通常用于构建具有类似操作的分层或树状数据结构。它允许我们对单个对象和对象集合进行相同的操作,实现了“部分-整体”的层次结构。 Composite模式的主要角色包括: 1. **Component(组件)*...

    java与模式光盘源码

    例如,组合模式(Composite)结合了部分与整体的行为,使得代码能够一致地处理单个对象和对象集合。桥接模式(Bridge)将抽象部分与其实现部分分离,使它们可以独立变化,提供更大的灵活性。这些模式的组合使用可以...

    深入浅出设计模式之复合模式

    虽然未提供具体章节的内容,但基于标题、描述和标签,我们可以深入探讨复合模式的基本概念、应用场景以及实现原理。 ### 复合模式概述 复合模式(Composite Pattern)是一种结构型设计模式,它允许开发者将对象...

    Ext Composite 应用注意

    本文将深入探讨`Ext Composite`的应用及其注意事项。 `Ext Composite`的核心概念是“组合”,它允许我们将一组具有共同特性的组件聚合在一起,作为一个整体进行操作。这种模式在面向对象设计中被称为组合/聚合,它...

    Java设计模式之禅

    《Java设计模式之禅》是一本深入浅出讲解设计模式的书籍,书...综上所述,本书不仅是一本关于设计模式的入门书,也是对设计模式应用的深入探讨,无论是对于初级开发者、高级程序员,还是系统分析师,都能从中获得价值。

    设计模式学习笔记大全

    Composite模式将对象组合成树形结构,以表示“部分-整体”的层次结构。它使得客户对单个对象和组合对象的使用具有一致性,提供了统一的操作接口。 8. 面向对象设计模式与原则: 面向对象设计模式通常基于一些基本...

    组合模式二叉树,前序、中序、后续,迭代器模式访问遍历

    在这个主题中,我们主要探讨了如何利用组合模式(Composite Pattern)构建二叉树,并通过迭代器模式(Iterator Pattern)来实现对树的遍历,包括前序、中序和后序遍历。这些是设计模式中的经典应用,对于理解和掌握...

    PHP设计模式

    常见的结构型模式包括适配器模式(Adapter)、桥接模式(Bridge)、组合模式(Composite)、装饰者模式(Decorator)、外观模式(Facade)、享元模式(Flyweight)和代理模式(Proxy)。 行为型模式关注对象之间的...

Global site tag (gtag.js) - Google Analytics