专业的JAVA编程教程与资源

网站首页 > java教程 正文

Java设计模式(java设计模式及应用案例)

temp10 2024-09-03 21:52:09 java教程 16 ℃ 0 评论

1、简单工厂模式

简单工厂模式的本质就是一个工厂类根据传入的参数,动态的决定实例化哪个类。

Spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获得bean对象。

Java设计模式(java设计模式及应用案例)

2、工厂方法模式

应用程序将对象的创建及初始化职责交给工厂对象,工厂Bean。

定义工厂方法,然后通过config.xml配置文件,将其纳入Spring容器来管理,需要通过factory-method指定静态方法名称

3、单例模式

Spring用的是双重判断加锁的单例模式,通过getSingleton方法从singletonObjects中获取bean。单例模式有以下特点:

++663  

1、单例类只能有一个实例。

2、单例类必须自己创建自己的唯一实例。

3、单例类必须给所有其他对象提供这一实例。

目的:

  单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用。总之,选择单例模式就是为了避免不一致状态,避免政出多头。

单例模式7种写法:

线程不安全懒汉式线程安全懒汉式饿汉式使用容器实现单例模式静态内部类枚举单例双重校验锁


/*
 * 一来就生成对象,饿汉式
 * 优点:1 安全
 * 缺点:1 项目启动会占内存,会增加启动的时间
 */
public class Singleton_h {
    //1构造器私有
    private Singleton_h() {
        
    }
    
    //2静态的实例指向自身 
    private static Singleton_h s = new Singleton_h();
    
    //3公共的方法暴露这个实例
    public static Singleton_h getInstance() {
        return s;
    }
}
/*
 * 懒汉式单例
 * 优点:延迟创建实例,需要再创建
 * 缺点:是有线程安全问题的单例,后面多线程会修复这个程序
 */
public class Singleton_l {
	//1 私有的构造器
	private Singleton_l() {
		
	}
	
	//2私有的实例变量
	private static Singleton_l s;
	
	//3一个公共的静态的方法暴露实例
	public static Singleton_l getInstance() {
		
		//判断没有实例
		if(s ** null) {
			//创建一个单例对象
			s = new Singleton_l();
		}
		
		return s;
	}
}

/*
 *	双重判空
 */
public class Singleton_s{
	private class Singleton_s(){}
	private volatile stataic Singleton_s singleton;
	public static Singleton_s getInstance(){
		if(singleton ** null){
			synchronized(Singleton_s.class){
				if(singleton ** null){
					singleton = new Singleton_s();
				}
			}
		}
		return singleton;
	}
}

4、代理模式

Spring的AOP中,使用的Advice(通知)来增强被代理类的功能。Spring实现AOP功能的原理就是代理模式(① JDK动态代理,② CGLIB字节码生成技术代理。)对类进行方法级别的切面增强

5、装饰器模式

装饰器模式:动态的给一个对象添加一些额外的功能

SpringApplicationContext中配置所有的DataSource。这些DataSource可能是不同的数据库,然后SessionFactory根据用户的每次请求,将DataSource设置成不同的数据源,以达到切换数据源的目的。

在Spring中有两种表现:

一种是类名中含有Wrapper,另一种是类名中含有Decorator

6、观察者模式

定义对象间的一对多关系,当一个对象状态发生改变时,所有依赖于它的对象都得到通知自动更新

Spring中观察者模式一般用在listener的实现。

7、策略模式

策略模式是行为性模式调用不同方法适应行为变化强调父类调用子类特性

getHandlerHandlerMapping接口中的唯一方法,用于根据请求找到匹配的处理器

8、模板方法模式

Spring JdbcTemplate的query方法总体结构是一个模板方法+回调函数query方法调用execute()是一个模板方法,而预期回调doInStatement(Statement state)方法也是一个模板方法

9、设计模式两大主题&六大原则

设计模式的两大主题—— 系统复用 和 系统拓展

设计模式六大原则

1单一职责原则(Single Responsibility Principle,SRP):一个类应该只有一个引起它变化的原因,即一个类应该只有一个职责

2、开闭原则(Open-Closed Principle,OCP):软件实体(类、模块、函数等)应该对扩展开放对修改关闭。即在不修改现有代码的情况下,通过扩展增加新功能

3、里氏替换原则(Liskov Substitution Principle,LSP):子类必须能够替换掉父类并且能够正常使用,即子类应该能够继承父类行为不改变父类原有的功能

4、依赖倒置原则(Dependency Inversion Principle,DIP):高层模块不应该依赖于低层模块二者都应该依赖于抽象。即要依赖于抽象,而不是依赖于具体实现

5、接口隔离原则(Interface Segregation Principle,ISP):客户端不应该依赖它不需要的接口,即一个类另一个类的依赖应该建立在最小的接口上

6、迪米特法则(Law of Demeter,LoD):一个对象应该对其他对象有尽可能少的了解,即一个类应该尽量减少对其他类的依赖

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表