Composite 模式初探

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");
}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值