【設計模式篇】Android設計模式之-組合模式 自我見解

來源:互聯網
上載者:User

標籤:android   style   blog   http   io   ar   color   os   使用   

安卓中對組合模式那就是View以及 ViewGroup類的使用,基本所有的widget和布局類都依靠這兩個類。

組合模式,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; //動物的 特殊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;}}



MainActivity.java

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();}}






【設計模式篇】Android設計模式之-組合模式 自我見解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.