欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-04-22 08:49:30
装饰设计模式: 使用场景: 二次开发的时候,无法获取到源码,无法使用继承的前提下,希望对已经存在的对象上的功能进行增强,考虑使用。 好处:降低耦合性 实现: 弊端:如果接口中的方法过多,实现会比较繁琐。 动态代理(解决了装饰设计模式的弊端问题): 1.通过反射产生一个代理类。 2.只要传入一个对象, ......

装饰设计模式:

使用场景:

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

好处:降低耦合性

实现:

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.适配器原理:

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