【设计模式篇】Android设计模式之-组合模式 自我见解
组合模式,Composite Pattern,是一个非常巧妙的模式。几乎所有的面向对象系统都应用到了组合模式。
根据图片的意思,我便结合自己的理解,写了个demo,有什么不对的地方,请大家留意,指点下。
以下是图片来自网络
demo:功能如下: 理解的有问题请指出。
动物作为一个基类,人、猪,都继承了他的所有属性,并且有自己独特的属性以及方法。(相当于Button\textview这些叶子节点)
他们有一个共同的房间,房间里门,对他们的进出进行了实时的管理操作。(相当于ViewGroup统一管理布局)
Animal.java
package com.ferris.composite; /** * ferris * @author [email protected] * 动物类 */ 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; //动物的 特殊id protected 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; } @Override public void addAnimal(Animal animal) { // TODO Auto-generated method stub if(!animals.contains(animal)){ animals.add(animal); } } @Override public void removeAnimal(Animal animal) { // TODO Auto-generated method stub if(animals.contains(animal)){ animals.remove(animal); } } @Override public void removeAllAnimal() { // TODO Auto-generated method stub if(animals.size()>0){ animals.clear(); } } @Override public int getAnimalCount() { // TODO Auto-generated method stub return animals==null?0:animals.size(); } @Override public ArrayList<Animal> getAnimals() { // TODO Auto-generated method stub return 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; @Override protected 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(); } }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。