【设计模式篇】Android设计模式之-组合模式 自我见解
来源:互联网 发布:家用灭蚊 知乎 编辑:程序博客网 时间:2024/05/17 22:23
安卓中对组合模式那就是View以及 ViewGroup类的使用,基本所有的widget和布局类都依靠这两个类。
PersonAnimal.java 人
PigAnimal.java 猪
door.java
组合模式,Composite Pattern,是一个非常巧妙的模式。几乎所有的面向对象系统都应用到了组合模式。
根据图片的意思,我便结合自己的理解,写了个demo,有什么不对的地方,请大家留意,指点下。
以下是图片来自网络
demo:功能如下: 理解的有问题请指出。
动物作为一个基类,人、猪,都继承了他的所有属性,并且有自己独特的属性以及方法。(相当于Button\textview这些叶子节点)
他们有一个共同的房间,房间里门,对他们的进出进行了实时的管理操作。(相当于ViewGroup统一管理布局)
Animal.java
package com.ferris.composite;/** * ferris * @author 459821731@qq.com * 动物类 */public class Animal {public class Attribute{public static final int PEOPLE=0;//人类public static final int COW=1;//牛public static final int SLEEP=2;//羊public static final int PIG=3;//猪}public Animal(){}protected int id; //动物的 特殊idprotected String name;//动物的名字protected int type;//动物的类型public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getType() {return type;}public void setType(int type) {this.type = type;}//动物的行为方法protected void operation(){}}
PersonAnimal.java 人
package com.ferris.composite;public class PersonAnimal extends Animal {private String zoulu;public String getZoulu() {return zoulu;}public void setZoulu(String zoulu) {this.zoulu = zoulu;}public PersonAnimal() {// TODO Auto-generated constructor stub}}
PigAnimal.java 猪
package com.ferris.composite;public class PigAnimal extends Animal {private String zhurou;//独特的属性,可以被吃public String getZhurou() {return zhurou;}public void setZhurou(String zhurou) {this.zhurou = zhurou;}public PigAnimal() {// TODO Auto-generated constructor stub}}
door.java
package com.ferris.composite;import java.util.ArrayList;/** * 这是一个门,管理这进出 * @author Administrator * */public interface Door {public void addAnimal(Animal animal);//添加一个动物public void removeAnimal(Animal animal);//移除一个动物public void removeAllAnimal();//移除所有动物public int getAnimalCount();//获取所以动物数量public ArrayList<Animal> getAnimals();}
House.java 房间,实现了一个接口 door
package com.ferris.composite;import java.util.ArrayList;/** * 房间 ,门管理着所以动物的进出 * @author Administrator * */public class House implements Door{private ArrayList<Animal> animals=new ArrayList<Animal>();private static House house;public static House getHouseInstance(){if(house==null){synchronized (House.class) {if(house==null){return new House();}}}return house;}@Overridepublic void addAnimal(Animal animal) {// TODO Auto-generated method stubif(!animals.contains(animal)){animals.add(animal);}}@Overridepublic void removeAnimal(Animal animal) {// TODO Auto-generated method stubif(animals.contains(animal)){animals.remove(animal);}}@Overridepublic void removeAllAnimal() {// TODO Auto-generated method stubif(animals.size()>0){animals.clear();}}@Overridepublic int getAnimalCount() {// TODO Auto-generated method stubreturn animals==null?0:animals.size();}@Overridepublic ArrayList<Animal> getAnimals() {// TODO Auto-generated method stubreturn animals;}}
package com.ferris.androidpattern;import android.os.Bundle;import android.support.v4.app.FragmentActivity;import android.widget.Toast;import com.ferris.composite.Animal.Attribute;import com.ferris.composite.House;import com.ferris.composite.PersonAnimal;import com.ferris.composite.PigAnimal;public class MainActivity extends FragmentActivity {private House house;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);house=House.getHouseInstance();//得到一个房间//人进入房间了PersonAnimal json=new PersonAnimal();json.setId(1);json.setName("我是人");json.setType(Attribute.PEOPLE);house.addAnimal(json);//一个人进入房间了PigAnimal pig=new PigAnimal();pig.setId(2);pig.setName("我是猪");pig.setType(Attribute.PIG);house.addAnimal(pig);//猪也进入房间了Toast.makeText(MainActivity.this, "房间里有多少动物:"+house.getAnimalCount(), 1).show();}}
0 0
- 【设计模式篇】Android设计模式之-组合模式 自我见解
- 【设计模式篇】Android设计模式之-策略模式 自我见解
- 【设计模式篇】Android设计模式之-观察者模式 自我见解
- android设计模式系列之组合模式
- 设计模式之个人见解
- 设计模式之见解一
- 设计模式之见解二
- 设计模式之见解三
- 设计模式之组合模式
- 设计模式之组合模式
- 设计模式之组合模式
- 设计模式之--组合模式
- 设计模式之组合模式
- 设计模式之组合模式
- 设计模式之组合模式
- 设计模式之组合模式
- 设计模式之---组合模式
- 设计模式之组合模式
- 线程间操作无效: 从不是创建控件“”的线程访问它的解决方法~
- eclipse老是building workspace及自动更新问题,eclipse加速
- C#中如何创建文件夹
- android为App签名(为apk签名)
- SVN 代码提交操作步骤
- 【设计模式篇】Android设计模式之-组合模式 自我见解
- android:为TextView添加样式——下划线,颜色,设置链接样式及前背景色
- iOS QQ登录 傻瓜式集成
- 某些手机(Andreno gpu)上gpu渲染异常的问题。(文章原题:CCRenderTexture 从后台进入前台变黑的处理(android))
- 瞎写。
- HIve实战分析Hadoop的日志
- UILabel 上下左右对齐
- 使用OSGi-JAXRS-Connector实现Restful
- 设计模式——状态模式