一、单例模式
1.1 饿汉模式:静态的,会提前new
package com.apesource.singlton;
/**
* @Author Maven
* @VERSION 1.0
* @since 2022/7/19
*/
public class Hungre {
private static Hungre hungre = new Hungre();
//创建私有构造
public Hungre() {
}
//创建公共方法构造
public static synchronized Hungre crean(){
return hungre;
}
}
1.2 懒汉模式:需要的时候在new
package com.apesource.singlton;
/**
* @Author Maven
* @VERSION 1.0
* @since 2022/7/19
*/
public class Lazy {
private static Lazy lazy = null;
//创建私有构造
public Lazy() {
}
//创建公共方法构造
public static synchronized Lazy crean(){
if(lazy == null){
lazy = new Lazy();
}
return lazy;
}
}
二、工厂模式
package com.apesource.factory;
/**
* @Author Maven
* @VERSION 1.0
* @since 2022/7/19
*/
//有一个父接口
public interface IUmbrella {
public void umbrellaType();
}
//两个子接口实现父接口
package com.apesource.factory;
/**
* @Author Maven
* @VERSION 1.0
* @since 2022/7/19
*/
public class LongUmbrellaImp implements IUmbrella{
public void umbrellaType() {
System.out.println("我是一把长伞-.-");
}
}
package com.apesource.factory;
/**
* @Author Maven
* @VERSION 1.0
* @since 2022/7/19
*/
public class ShortUmbrella implements IUmbrella{
public void umbrellaType() {
System.out.println("我是一把折叠短伞-.-");
}
}
//工厂类造对象
package com.apesource.factory;
/**
* @Author Maven
* @VERSION 1.0
* @since 2022/7/19
*/
public class UmbrellaFactory {
public static final int LONG_UMBERLLA = 1;
public static final int SHORT_UMBERLLA = 2;
public static IUmbrella creat(int type) {
if (type == 1) {
return new LongUmbrellaImp();
} else if (type == 2){
return new ShortUmbrella();
}
return null;
}
}
//实现
package com.apesource.factory;
/**
* @Author Maven
* @VERSION 1.0
* @since 2022/7/19
*/
public class Trest01 {
public static void main(String[] args) {
UmbrellaFactory.creat(1).umbrellaType();
}
}
三、模板模式(Template)
模板模式首先要有一个抽象类,这个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式,所谓模板板式,就是在父类中定义算法的主要流程,而把一些个性化的步骤延迟到子类中去实现,父类始终控制着整个流程的主动权,子类只是辅助父类实现某些可定制的步骤。
Spring中jdbcTemplate、hibernateTemplate等以Template结尾的对数据库操作的类,它们就使用到模板模式。一般情况下,我们都是使用继承的方式来实现模板模式,但是Spring并没有使用这种方式,而是使用Callback模式与模板方法配合,既达到了代码复用的效果,同时增加了灵活性
package com.apesource.test;
/**
* @Author Maven
* @VERSION 1.0
* @since 2022/7/19
*/
public abstract class Father {
//模板
public final void template(){
study();
job();
love();
}
//学习
private void stud