- 单例模式:一定要注意定义私有的构造函数。包含饿汉式(类加载时就实例化),懒汉式(调用时才初始化,推荐,但要考虑性能:volatile修饰变量,然后同步块里再判断对象空才new)。
- 工厂模式:
简单工厂模式(Simple Factory),在工厂(水果工厂)方法里创建具体产品类。
工厂方法模式(Factory Method),顶层为抽象工厂(水果工厂)类,不具体实现类的创建,交由具体子工厂类(苹果工厂)的工厂方法里new具体产品。
抽象工厂模式(Abstract Factory),在工厂方法基础上再抽象升级,可生产不同类型产品的不同型号,然后在具体类型子工厂(香蕉工厂)中new不同型号产品(香蕉牛奶、香蕉干等)的类对象。
- 适配器模式:接口适配转换,相当于类引用。
- 模板模式(Templete):是先定义一个抽象类,实现一些方法,在这些方法中需要调用一个抽象方法,且这个抽象方法必须由子类决定实现的功能,定义多个子类去实现父类的抽象方法。感觉跟适配器模式很像,不一样的是适配器模式的抽象类都实现了所有的空方法,总的来说,还是抽象类跟接口直接的巧妙结合。
- 代理模式:
简单代理模式,要定义接口、代理类、被代理类。相当于依赖注入,把被代理的对象作为一个属性放到代理对象中,然后需要调用被代理对象的方法时可以对其进行一些封装,例如:要叫老板审批,代理者秘书就可以在审批前后先做一些记录然后再调用老板的审批操作。
动态代理模式,主要利用java.lang.reflect包中的InvocationHandler和Proxy.newProxyInstance来实现的。定义一个被代理类实现一个接口,然后定义个代理类实现InvocationHandler,并且注入一个对象属性(也就是被代理类),这样在代理类的invoke方法中就可以对被代理类的实现进行封装。
调用如下:
RealSubject realSubject = new RealSubject();
Subject proxySubject = (Subject) Proxy.newProxyInstance(Subject.class.getClassLoader(),
new Class[] { Subject.class }, new ProxyHandler(realSubject));
System.out.println("===Without Proxy===");
doSomething(realSubject);
System.out.println("===With Proxy======");
doSomething(proxySubject);
学的不深,先把理解的给加上,以后有空再上代码~~~