一 简单工厂模式:
1个接口定义方法,
2个实现类重写接口方法,
1个工厂类 定义方法返回类型是接口,但是返回值一般是该接口的实现类,接口是抽象的,不能实例化的,但是接口可以声明一个引用,指向其实现类。
1个测试类 创建工厂类对象,调用其方法,传type值,用来确认返回值是改接口哪个实现类。得到的返回值是该接口的实现类,调用其方法打印输出语句。
优缺点:这样模块清晰化,每个部分都各司其职,分工明确,代码就实现最渐层意义上的 “可维护” 啦。 说到缺点,当我们需要增加一产品,
比如在学习一门新技术时,这样个小功能我们就要去添加一个新的类,同时我们需要在Factory中改动到switch 里面的代码,
这是耦合性很高的表现啦!
二 工厂模式:
一个A接口,定义一个方法规范(),返回类型:B接口。这里A接口相当于工厂的规范条件。
一个实现类AImpl,重写方法,返回类型B接口,返回值B接口的实现类,连接的是A接口。这里相当于一个分厂
一个B接口,定义一个方法规范(学习技术),返回类型:void
一个实现类BImpl,重写方法,要学习的技术,比如python,连接的是B接口
一个测试类C,创建一个A接口的实现类,调用其方法,返回B接口对应的实现类,调用其方法,打印输出。
优缺点:可以设立多个子工厂,而不是所有的产品有单一的工厂来生产,而是给各自特色的子工厂来生产。
比如:要增加一门新技术,可以创建一个分厂,就是再创建一个AImpl。但是这样做每增加一门
技术,相应的也要增加一个子工厂,加大了额外的开发量。
三 抽象工厂:
1.一个A接口 定义一个方法,比如关于前端的,
2.一个AImpl实现类,实现A接口的方法,要学习H5
3.一个B接口 定义一个方法,比如关于后端的,
4.一个BImpl实现类,实现B接口的方法,要学习Java
5.一个抽象类(工厂) 定义两个抽象方法,返回类型是A接口,B接口
6.一个抽象类的子类(子工厂) 重写父类的两个方法,返回值是A接口实现类,B接口实现类
7.一个测试类,创建一个子工厂对象,调用两个方法可以得到两个不同接口的实现类对象,调用其方法,打印输出。
抽象工厂优缺点:可以创建分工厂来增加已知种类的新技术,大大降低了耦合性,但是但出现一种不是已知种类的新种类时
就需要创建一个新的接口,就需要改变其工厂类的方法,影响到所有子工厂,必须重写父类的抽象方法
四 代理模式:代理类与委托类有同样的接口,代理类主要负责处理信息,过滤信息,处理业务调用的还是委托类的方法,测试的时 候是创建代理类的对象执行其方法。
优缺点:代理对象必须提前写出,如果接口发生了变化,代理对象的代码也要进行维护。
五 单例模式
懒汉:1 私有的构造函数,只限本类使用,
private 类名(){}
2 本类的私有的静态的属性(伴随着类的加载而加载,且只加载一次)
private static 类名 类对象名 = null;
3 提供一个对象可以访问该类公共的静态的方法
public static 类名 方法名(){
if(类对象名==null){类对象名 = new 类名();}
return 类对象名;
}
恶汉:1 private 类名(){}
2 private static 类名 类对象名 = new 类名();
3 public static 类名 方法名(){ return 类对象名; }
懒汉和饿汉的区别
1,类加载速度 懒汉快,饿汉慢 懒汉加载时不用初始化对象
2,运行时获取对象的速度 懒汉慢,饿汉快 懒汉调用方法时才实例化对象
3,占用资源情况 懒汉调用获取实例方式才加载对象,饿汉是该类被实例化时一直占用资源
懒汉存在线程不安全的问题,当多个线程同时调用这个方法时,实例化对象就会发生混乱。
以上便是个人的一点理解,如有错误,请及时纠正,不胜感激!