栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

ioc用到了哪些设计模式(io流控制符是什么)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

ioc用到了哪些设计模式(io流控制符是什么)

修饰器模式

Decorator装饰器
定义:装饰模式是在不必改变原类文件和不使用继承的情况下,动态的扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。

注意其中的几点:
● 不改变原类文件
● 不使用继承
● 动态扩展

例子:
原类的父类接口

interface A{
	void method();
}

原类

class oldclass implements A{
	@Override
	public void method(){
		System.out.println("这是修饰器模式中的被修饰类中的方法、、、");
	}
}

修饰类

abstract class B extends A{
	protected A a;
	public B(A a){
		super();
		this.a = a;
	}
	public void method(){
		a.method(); 
	}
} 

具体修饰类实现

class newClass extends B{
	public newClass(A a){
		super();
	}
	public void newmethod(){
		System.out.println("这是新增加的方法");
	}
	@Override
	public void method(){
		System.out.println("这里可以将之前的类进行包装");
		super(); 
		System.out.println("包装结束");
	} 
}

运行的截图(不要在意内容)

在IO中的使用
//文件路径
String filePath = "/Users/gongdezhe/Desktop/Test.txt";

InputStream inputStream = new FileInputStream(filePath);
System.out.println("FileInputStream不支持mark和reset:" + inputStream.markSupported());
System.out.println("----------------------------------");

//首先装饰成BufferedInputStream
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
System.out.println("BufferedInputStream支持mark和reset" + bufferedInputStream.markSupported());
//提供实现自由的方法
bufferedInputStream.mark(0);//标记一下
char c = (char) bufferedInputStream.read();
System.out.println("文件的第一个字符:" + c);
bufferedInputStream.reset();//重置
c = (char) bufferedInputStream.read();//再读
System.out.println("重置以后再读一个字符,依然会是第一个字符:" + c);
bufferedInputStream.reset();
适配器 适配器在IO流中使用

在IO中适配器的使用也比较广泛
适配器角色就是InputStreamReader,
被适配的角色是InputStream类代笔的实例对象,
目标接口是Reader类。
可以看到,InputStreamReader实现了Reader接口,并且持有了InputStream的引用,这里是通过StreamDecoder类间接持有的,因为从byte到char 要经过编码。

public abstract class Reader implements Readable, Closeable {
abstract public int read(char cbuf[], int off, int len) throws IOException;
abstract public void close() throws IOException;
}

public class InputStreamReader extends Reader {
    private final StreamDecoder sd;
    //持有对被适配对象的引用
    public InputStreamReader(InputStream in) {
        super(in);
        try {
            //通过StreamDecoder类间接引用被适配的对象
            sd = StreamDecoder.forInputStreamReader(in, this, (String)null);
        } catch (UnsupportedEncodingException e) {
            // The default encoding should always be available
            throw new Error(e);
        }
    }
    //…(省略的代码)
 }
 
 public abstract class InputStream implements Closeable {
 //代码省略
}
装饰器与适配器异同点

装饰器与适配器都有一个别名叫做 包装模式(Wrapper),它们看似都是起到包装一个类或对象的作用,但是使用它们的目的很不一一样。
适配器模式:义是要将一个接口转变成另一个接口,它的目的是通过改变接口来达到重复使用的目的。
装饰器模式:不是要改变被装饰对象的接口,而是恰恰要保持原有的接口,但是增强原有对象的功能,或者改变原有对象的处理方式而提升性能。所以这两个模式设计的目的是不同的。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/773228.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号