android设计模式之Composite
16lz
2021-01-23
今天我们来谈谈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);}}
更多相关文章
- Android assets 目录作用
- Android swap分区作用及swapper软件设置方法
- android 中怎样能够清除activity堆栈,也就是退出整个应用
- LinearLayout中android:layout_weight的作用
- 使android:fillAfter="true"在xml中起作用
- ImageView的属性android:scaleType作用
- android:xmlns的作用以及自定义
- Android中Handler的作用