【设计模式篇】Android设计模式之-组合模式 自我见解

安卓中对组合模式那就是View以及 ViewGroup类的使用,基本所有的widget和布局类都依靠这两个类。

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

}



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



}






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
图像识别技术在病虫害检测中的应用是一个快速发展的领域,它结合了计算机视觉和机器学习算法来自动识别和分类植物上的病虫害。以下是这一技术的一些关键步骤和组成部分: 1. **数据收集**:首先需要收集大量的植物图像数据,这些数据包括健康植物的图像以及受不同病虫害影响的植物图像。 2. **图像预处理**:对收集到的图像进行处理,以提高后续分析的准确性。这可能包括调整亮度、对比度、去噪、裁剪、缩放等。 3. **特征提取**:从图像中提取有助于识别病虫害的特征。这些特征可能包括颜色、纹理、形状、边缘等。 4. **模型训练**:使用机器学习算法(如支持向量机、随机森林、卷积神经网络等)来训练模型。训练过程中,算法会学习如何根据提取的特征来识别不同的病虫害。 5. **模型验证和测试**:在独立的测试集上验证模型的性能,以确保其准确性和泛化能力。 6. **部署和应用**:将训练好的模型部署到实际的病虫害检测系统中,可以是移动应用、网页服务或集成到智能农业设备中。 7. **实时监测**:在实际应用中,系统可以实时接收植物图像,并快速给出病虫害的检测结果。 8. **持续学习**:随着时间的推移,系统可以不断学习新的病虫害样本,以提高其识别能力。 9. **用户界面**:为了方便用户使用,通常会有一个用户友好的界面,显示检测结果,并提供进一步的指导或建议。 这项技术的优势在于它可以快速、准确地识别出病虫害,甚至在早期阶段就能发现问题,从而及时采取措施。此外,它还可以减少对化学农药的依赖,支持可持续农业发展。随着技术的不断进步,图像识别在病虫害检测中的应用将越来越广泛。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

重播

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值