android设计模式之Composite

今天我们来谈谈android的设计模式的Composite吧,里面的例子用的是高焕堂老师的一些资料,加上自己对android的一些理解,先说说具体的本文的代码的框架的结构吧,首先有一个叫Money的类作为类似android的View,然后继承自Money的Wallet作为android中的ViewGroup,这个Wallet可以包含自己,也可以包含money,接下来就是和Wallet同类的继承于Money的Coin,这个类只能包含本身,第三次也就是我们最爱用的一层,继承自Wallet的myWallet,这个的作用就和Linearlayout的作用差不多,也就是可以包含,还有就是Coin的具体five,ten,还有就是vm类似于android中的activity,而machine类似mainactivity,大概逻辑就是这样,大家对比看一下,总之在这里主要的思想就是,钱包里面可以包含钱,也可以包含钱包,而钱里面就只能有钱,用高老师经典的话语就是乱中有序,序中有乱。我认为的就是世界是一个整体,表面上是乱的,如果分了类以后就变成了有序的,但是每个类别的里面又是乱的,具体的东西大家就自己去理解一下吧!贴代码了:

    

package com.jk.compositedemo;

public abstract class Coin extends Money {
//just as the  TextView in the android
	@Override
	public double onValue() {
		
		return 0;
	}

	@Override
	public final void add (Money money) {

	}

}


package com.jk.compositedemo;

public class FiveDollar extends Coin {
	//just as the Button in the android
    @Override
    public double onValue() {
    	// TODO Auto-generated method stub
    	return 5.0;
    }
}

package com.jk.compositedemo;

public class Machine extends VM {
     //just as the MainActivity in android
	@Override
	public void factoryMethod() {
		Wallet wa=new MyWallet();
		Wallet wa2=new MyWallet();
		wa2.add(new TenDollar());
		feedMoney(wa2);
		wa.add(wa2);
		wa.add(new FiveDollar());
		feedMoney(wa);

	}
	public void showAmount(){
		System.out.println("AMT:"+getAmount());
	}

}

package com.jk.compositedemo;

public abstract class Money {
	//just as the View in the android
	//calculate the total money
	public abstract double onValue();
	//add the money
	public abstract void add(Money money);

}

package com.jk.compositedemo;

public class MyWallet extends Wallet {
	//just as the LinearLayout in the android
	@Override
	public double onValue() {
		// TODO Auto-generated method stub
		return super.onValue()*1.05;
	}

}

package com.jk.compositedemo;

public class TenDollar extends Coin {
	//just as the another subclass of the TextView
	@Override
	public double onValue() {
		
		return 10.0;
	}

}

package com.jk.compositedemo;

public class Test {

	/**
	 * @author jk
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
                Machine machine=new Machine();
                machine.factoryMethod();
                machine.showAmount();
	}

}

package com.jk.compositedemo;

public abstract class VM {
	//just as the activity
	private Money money;
	public void feedMoney(Money money){
		this.money=money;
	}
	public double getAmount()
	{
		return money.onValue();
	}
	public abstract void factoryMethod();

}

package com.jk.compositedemo;

import java.util.ArrayList;

public class Wallet extends Money {
	protected ArrayList<Money> coll;
   //just as the View in the android
	public Wallet() {
		coll=new ArrayList<Money>();
		
	}

	public double onValue() {
		double sum=0;
		for(int i=0;i<coll.size();i++){
			sum+=((Money)coll.get(i)).onValue();
		}
		return sum;
	}

	public void add(Money money) {
		coll.add(money);

	}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值