工厂模式设计实现读取文本文件和图像的三基色信息

原创 2016年06月01日 15:35:58

要求:

编写读文件功能,具体为读取文本文件(包括GBK,UTF8,UNICODE 编码下的文本文件,要求获得全文内容);读取图像文件(BMO,GIF,JPG ),要求获得图像的宽度、长度、每一点的RGB三基色信息。

请使用观察者模式设计该系统。

代码:

import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;

interface Type{
	public void read();

	public void read(String filePath);
}
class TextType implements Type{
	public void read(String filePath){
		
		try{
			String encoding="GBK";
		File file = new File(filePath);
		if(file.isFile()&&file.exists()){
			InputStreamReader du = new InputStreamReader(new FileInputStream(file),encoding);
			BufferedReader bufferedReader = new BufferedReader(du);
			String lineTxt = null;
			while((lineTxt = bufferedReader.readLine())!=null){
				System.out.println(lineTxt);
			}
			du.close();
		}else{
			System.out.println("找不到指定文件!");
		}
		}catch(Exception e){
			System.out.println("读取文件内容出错!");
			e.printStackTrace();
		}
	}

	@Override
	public void read() {
		// TODO Auto-generated method stub
		
	}
}
class ImageType implements Type{
	public void read(){
		
	}

	@Override
	public void read(String filePath) {
		   ImageIcon image=new ImageIcon(filePath);
		   InputStream in;
		   BufferedImage img = null;
		try {
			in = new FileInputStream(filePath);
			img=ImageIO.read(in);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}catch(IOException e){
			e.printStackTrace();
		}
		
		   int wid=img.getWidth();
		   int hid=img.getHeight();
		   int rgb[][]=new int[wid][hid];
	          for(int i=0;i<wid;i++){
	               for(int j=0;j<hid;j++){
	                    rgb[i][j]=img.getRGB(i, j) & 0xFFFFFF;
	                    System.out.print(rgb[i][j]+" ");
	               }
	               System.out.println();
	          }
		    //System.out.println(wid+" "+hid);
		   }
			 }
	
class TypeFactory{
	public Type getType(String type){

		if(type==null){
			return null;
		}
		if(type.equals("TextType")){
			return new TextType();
		}else if(type.equals("ImageType")){
			return new ImageType();
		}
		return null;

	}
}
public class FactoryDemo {
	public static void main(String []args){
		
		TypeFactory typefactory = new TypeFactory();
		
		Type type1 = typefactory.getType("TextType");
		String filePath1 ="C:\\Users\\ZZT\\Desktop\\1.txt";
		type1.read(filePath1);
		System.out.println();
		Type type2 = typefactory.getType("ImageType");
		String filePath2 ="C:\\Users\\ZZT\\Desktop\\2.jpg";
		type2.read(filePath2);
	}
}



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

设计模式介绍之六:工厂模式(factory)的巧妙实现

本文展示了实际项目中使用到的一个工厂模式实现,在向系统中添加新类型时,只需要在新类型的实现文件这一处做改动,将新增类型对应用程序代码的干扰降到了最低。...
  • foruok
  • foruok
  • 2014年01月23日 06:56
  • 5537

Java设计模式之工厂模式实现

  • 2013年03月19日 13:48
  • 16KB
  • 下载

大话设计模式 第一章 简单工厂模式 C++实现

将功能相似的类统一继承于一个抽象基类(Abstract Base Class),将这些子类的实例化交给一个工厂类来完成。应用多态和封装的思想,子类的代码对客户端不开放。使用基类指针或引用调用virtu...

java语言实现创建型设计模式—抽象工厂模式

一、描述 抽象工厂模式是在工厂方法的模式上进一步抽象而来,如果说工厂方法模式是对一个产品结构的创建而言的话,那么抽象工厂模式则是针对多个产品结构而言的,它被用来一次创建多个不同的产品对象。 我们要创建...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:工厂模式设计实现读取文本文件和图像的三基色信息
举报原因:
原因补充:

(最多只允许输入30个字)