代理模式
- 静态代理
- 动态代理:自动生成代理对象
动态代理需要学习java反射
例子:下面是一个静态代理的例子
(备注:学过框架的人看起来是不是很眼熟,是不是很像spring框架的AOP实现)
package com.zzs.model;
/***
* 动态代理例子
* @author zzs
* @deprecated 医生看病
*/
public class proxy {
public static void main(String args[]){
Doctor doctor = new DoctorImpl();
DoctorProxy doctorProxy = new DoctorProxy(doctor);
doctorProxy.treat();
}
}
interface Doctor{
void treat();
}
//被代理类
class DoctorImpl implements Doctor{
@Override
public void treat(){
System.out.println("看病");
}
}
//代理类
class DoctorProxy implements Doctor{
Doctor doctor;
public DoctorProxy(Doctor doctor) {
this.doctor = doctor;
}
@Override
public void treat() {
this.check();
this.doctor.treat();
this.medicine();
}
public void check(){
System.out.println("看病之前先检查");
}
public void medicine(){
System.out.println("看病之后要抓药");
}
}
工厂模式
工厂模式:实现调用者与创建者的分离,降低耦合,提高灵活性
即:自动生成对象
下面是一个简单工厂模式
package com.zzs.model;
/***
* 工厂模式
* @author zzs
*
*/
public class Factory {
public static void main(String args[]){
Animal cat = AnimalFactory.getCat();
//不用new 对象
cat.eat();
}
}
interface Animal{
void eat();
}
class Cat implements Animal{
@Override
public void eat() {
System.out.println("猫吃老鼠");
}
}
class AnimalFactory{
public static Animal getCat(){
return new Cat();
}
}
看到工厂模式,是不是想到的spring工厂,
spring就是一个强大的工厂,它通过配置文件和反射机制,完美的注入了对象。