当前位置: 移动技术网 > IT编程>开发语言>Java > 整理笔记--Java基础(设计模式)

整理笔记--Java基础(设计模式)

2018年03月15日  | 移动技术网IT编程  | 我要评论

装饰设计模式:

使用场景:

二次开发的时候,无法获取到源码,无法使用继承的前提下,希望对已经存在的对象上的功能进行增强,考虑使用。

好处:降低耦合性

实现:

1、包装类和被包装对象要实现同样的接口;
2、包装类要持有一个被包装对象;
3、包装类在实现接口时,大部分方法是靠调用被包装对象来实现的,对于需要修改的方法我们自己实现;

弊端:如果接口中的方法过多,实现会比较繁琐。

 

动态代理(解决了装饰设计模式的弊端问题):

  1.通过反射产生一个代理类。

  2.只要传入一个对象,就可以生成它的代理类。

弊端:这个对象必须要实现一个接口!

固定写法:用Proxy.newProxyInstance(这里有三个参数)方法。

//第一个参数  当前所在类的字节码加载器
//第二个 被包装类实现的所有接口
//第三个 实现invocationHandler匿名内部类

 

单例设计模式:

使用场景:

设计一个类,通过这个类只能获取到一个对象。

思想:

1.不让其他程序创建该类对象。
2.在本类中创建一个本类对象。
3.对外提供方法,让其他程序获取这个对象。

代码体现:

1,私有化构造函数;
2,创建私有并静态的本类对象;
3,定义公有并静态的方法,返回该对象。

例子1:

//饿汉式
class Single{
private Single(){}
private static Single s=new Single();
public static Single getIntance(){
return s;
}}

例子2:

//懒汉式
class Single{
private Single(){}
private static Single s;
public static Single getInstance(){
if(s==null){
synchronized(Single.class){
if(s == null) 
s=new Single();
reture s;
}}}}

两者的区别:

1.饿汉式是空间换时间,懒汉式是时间换空间。
2.在多线程访问时,饿汉式不会创建多个对象,而懒汉式有可能会创建多个对象。

例子3:

class Singleton {
//1,私有构造方法,其他类不能访问该构造方法了
private Singleton(){}
//2,声明一个引用
public static final Singleton s = new Singleton();
}

 

模板方法设计模式:

使用场景:

当功能内部一部分实现时确定,一部分实现是不确定的。这时可以把不确定的部分暴露出去,让子类去实现。

abstract class GetTime{

public final void getTime(){ //此功能如果不需要复写,可加final限定

long start = System.currentTimeMillis();

code(); //不确定的功能部分,提取出来,通过抽象方法实现

long end = System.currentTimeMillis();

System.out.println("毫秒是:"+(end-start));

}

public abstract void code(); //抽象不确定的功能,让子类复写实现

}

class SubDemo extends GetTime{

public void code(){ //子类复写功能方法

for(int y=0; y<1000; y++){

System.out.println("y");
}}}

 

适配器设计模式:

  1.什么是适配器:

在使用监听器的时候,需要定义一个类事件监听器接口。
通常接口中有多个方法,而程序中不一定所有的都用到,但又必须重写,这很繁琐。
适配器简化了这些操作,我们定义监听器时只要继承适配器,然后重写需要的方法即可。

  2.适配器原理:

适配器就是一个类,实现了监听器接口,所有抽象方法都重写了,但是方法全是空的。
适配器类需要定义成抽象的,因为创建该类对象,调用空方法是没有意义的,
目的就是为了简化程序员的操作,定义监听器时继承适配器,只重写需要的方法就可以了。

 

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网