java基礎學習複習之路(十二)---設計模式

代理模式

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章