黑马程序员 Java设计模式总结

------- android培训、java培训、java学习型技术博客、期待与您交流! ----------



1.单例模式

单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。

通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。

如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。

/*单例设计模式:解决一个类在内存只存在一个对象。
	想要保证对象唯一。
		1,为了避免其他程序过多建立该类对象。先禁止其他程序建立该类对象
		2,还为了让其他程序可以访问到该类对象,只好在本类中,自定义一个对象。
		3,为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式。
	这三部怎么用代码体现呢?
		1,将构造函数私有化。
		2,在类中创建一个本类对象。
		3,提供一个方法可以获取到该对象。*/
//最常用的单例模式-饿汉式:
Class Single{
	private Static Single s = new Single();
	private Single(){}
	public static Single getInstance(){
		return s;
	}
}


2.享元模式
享元模式 是一种软件设计模式。 它使用共享物件,用来尽可能减少内存使用量以及分享资讯给尽可能多的相似物件;

它适合用于当大量物件只是重复因而导致无法令人接受的使用大量内存。通常物件中的部分状态是可以分享。

常见做法是把它们放在外部数据结构,当需要使用时再将它们传递给享元。

例如:自动拆箱装箱的时候,将比较常用的数值单独存放在一个区域,用的时候直接去取,

当数值在byte(-127~128)范围内,对于新特性,如果该数值已经存在,则不会在开辟新的空间。

class IntegerDemo1 
{
	public static void main(String[] args) 
	{
		
		//Integer x = new Integer(4);

		Integer x = 4;// x自动装箱

		x = x + 2;// x自动拆箱
		
		Integer m = 128;
		Integer n = 128;

		sop("m==n:"+(m==n));//结果为false。因为超出了范围
							/*当数值在byte(-127~128)范围内,对于新特性,
							如果该数值已经存在,则不会在开辟新的空间。*/
		Integer a = 127;
		Integer b = 127;

		sop("a==b:"+(a==b));//结果为true。因为a和b指向了同一个Integer对象。						
	}
}


3.装饰设计模式

装饰模式是在不必改变原类文件和使用继承的情况下,动态的扩展一个对象的功能。

它是通过创建一个包装对象,也就是装饰来包裹真实的对象。

当想要对已有的对象进行功能增强时,可以定义类,将已有对象传入,
基于已有的功能,并提供加强功能。那么自定义的该类称为装饰类。

装饰模式比继承要灵活。避免了继承体系臃肿。
而且降低了类于类之间的关系。

例如:IO中的缓冲区技术

import java.io.*;

class  BufferedWriterDemo
{
	public static void main(String[] args) throws IOException
	{
		//创建一个字符写入流对象。
		FileWriter fw = new FileWriter("buf.txt");

		//为了提高字符写入流效率。加入了缓冲技术。
		//只要将需要被提高效率的流对象作为参数传递给缓冲区的构造函数即可。
		BufferedWriter bufw = new BufferedWriter(fw);

		for(int x=1; x<5; x++)
		{
			bufw.write("abcd"+x);
			bufw.newLine();

			bufw.flush();
		}
		bufw.close();
	}
}


4.模板方法模式

模版方法模式需要抽象类和具体子类协调完成,抽象类负责给出一个算法的轮廓和骨架,
具体子类负责给出这个算法的各个逻辑步骤既具体子类负责填充这个轮廓和骨架,不同的子类有不同的填充方法;
而将这些基本方法总汇起来的方法叫做模版方法,这个模板方法是在抽象类中以具体方法定义的。

例如:前面学习的类加载器中用到了模版方法模式


5.迭代器模式

Iterator,迭代器模式:提供一个方法顺序访问一个聚合对象的各个元素,而又不需要暴露该对象的内部表示。 
 
  
1.访问一个聚合对象的内容而无需暴露它的内部表示
2.支持对聚合对象的多种遍历
3.为便利不同的聚合结构提供一个统一的接口
6.桥模式
Bridge(桥接模式):将抽象部分与它的实现部分分离,使它们都可以独立地变化。

7.适配器模式
Adapter(适配器模式):将一个类的接口转换成客户希望的另外一个接口。
Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

8.代理模式
Proxy,代理模式:为其他对象提供一种代理以控制对这个对象的访问。
在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
 
  

------- android培训、java培训、java学习型技术博客、期待与您交流! ----------


你可能感兴趣的:(黑马程序员 Java设计模式总结)