今天我们来谈谈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@Overridepublic double onValue() {return 0;}@Overridepublic 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@Overridepublic 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 moneypublic abstract double onValue();//add the moneypublic abstract void add(Money money);}

package com.jk.compositedemo;public class MyWallet extends Wallet {//just as the LinearLayout in the android@Overridepublic double onValue() {// TODO Auto-generated method stubreturn super.onValue()*1.05;}}

package com.jk.compositedemo;public class TenDollar extends Coin {//just as the another subclass of the TextView@Overridepublic 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 activityprivate 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 androidpublic 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);}}

更多相关文章

  1. Android assets 目录作用
  2. Android swap分区作用及swapper软件设置方法
  3. android 中怎样能够清除activity堆栈,也就是退出整个应用
  4. LinearLayout中android:layout_weight的作用
  5. 使android:fillAfter="true"在xml中起作用
  6. ImageView的属性android:scaleType作用
  7. android:xmlns的作用以及自定义
  8. Android中Handler的作用

随机推荐

  1. 9 个强大的 JavaScript 小技巧[每日前端
  2. 从 JavaScript、ES6、ES7 到 ES10,你学到
  3. 用 globalThis 访问全局对象[每日前端夜
  4. 生产环境下的 Node.js 日志记录方案[每日
  5. 观察者模式
  6. 史上最全最强SpringMVC详细示例实战教程(
  7. Java中使用Jedis操作Redis
  8. 熬10天夜,肝出了这个PDF版「软件安装手册
  9. 阅完此文,Vue响应式不再话下
  10. java中关于Map的九大问题