学习设计模式的意义
设计模式的本质是面向对象原则的实际运用,是对类的封装性、继承性和多态性以及类的关联关系、组合关系的充分理解
正确使用设计模式具有以下优点
可以提高程序员的编程能力、思维能力和设计能力
使程序设计更加标准化,代码编制更加工程化,使软件开发效率大大提高,从而缩短软件开发周期
使设计的代码可重用性高,可读性强,可靠性高,灵活性好,可维护性强
oop七大原则
开闭原则:对扩展开放,对修改关闭
里氏替换原则:继承必须确保超类拥有的性质在子类中仍然成立,
依赖倒置原则:要面向接口编程,而不要面向实现编程
单一职责原则:控制类的粒度大小,将对象解耦,提高其内聚性
接口隔离原则:要为各个类创建他们需要的专用接口
迪米特法则:只与你的直接朋友交流,不要和陌生人说话
合成复用原则:尽量使用组合或聚合等关联关系来实现,其次才考虑使用继承关系来实现
单例模式
饿汉式单例模式
//饿汉式单例模式
public class Hungry {
private Hungry(){
}
private final static Hungry hungry=new Hungry();
public static Hungry getInstance(){
return hungry;
}
public static void main(String args[])
{
for (int i = 0; i < 10; i++) {
new Thread(()->{
System.out.println(Hungry.getInstance().hashCode());
}).start();
}
}
}
懒汉式单例模式
public class LazyMan {
private LazyMan(){
if(lazyMan!=null){
synchronized(LazyMan.class){
if(lazyMan!=null)
{
System.out.println("不要试图使用反射破环异常");
}
}
}
}
private volatile static LazyMan lazyMan;
//双重检测锁机制的懒汉式单例 DCL懒汉式
public static LazyMan getInstance()
{
if(lazyMan==null)
{
synchronized (LazyMan.class){
if(lazyMan==null) {
lazyMan = new LazyMan();
}
}
}
return lazyMan;
}
public static void main(String args[])
{
for (int i = 0; i < 10; i++) {
new Thread(()->{
LazyMan.getInstance();
}).start();
}
}
}
静态内部类
//静态内部类单例模式
public class Holder {
private Holder(){}
public static Holder getInstance(){
return innerClass.holder;
}
public static class innerClass{
private static final Holder holder=new Holder();
}
}
枚举类型单例模式
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
//使用枚举类型创建单例模式,避免被反射破环
public enum Enum {
INSTANCE;
public Enum getInstance()
{
return INSTANCE;
}
public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
Enum en=Enum.INSTANCE;
Constructor<Enum> declare=Enum.class.getDeclaredConstructor(String.class,int.class);
declare.setAccessible(true);
Enum en2=declare.newInstance();
System.out.println(en.hashCode());
System.out.println(en2);
}
}