代理模式
- 靜態代理
- 動態代理:自動生成代理對象
動態代理需要學習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就是一個強大的工廠,它通過配置文件和反射機制,完美的注入了對象。