【Java】簡單工廠模式、工廠模式、介面卡模式

love_Aym發表於2018-04-17

一、簡單工廠模式

1、 又叫靜態工廠方法模式,它定義一個具體的工廠類負責建立一些類的例項

2、優點: 客戶端不需要在負責物件的建立,從而明確了各個類的職責

3、缺點:這個靜態工廠類負責所有物件的建立,如果有新的物件增加,或者某些物件的建立方式不同,就需要不斷的修改工廠類,不利於後期的維護

4、案例演示

  • 動物抽象類:public abstract Animal { public abstract void eat(); }
  •  具體狗類:publicclass Dog extends Animal {}
  •  具體貓類:publicclass Cat extends Animal {}
  • 開始,在測試類中每個具體的內容自己建立物件,但是,建立物件的工作如果比較麻煩,就需要有人專門做這個事情,所以就知道了一個專門的類來建立物件。
public class Test {
	/**
	 * @param args
	 */
	public static void main(String[] args) {		
		Dog d = (Dog) AnimalFactory.createAnimal("dog");  //工廠返回的是一個animal類,此時需要強制轉換
		d.eat();
		
		Cat c = (Cat) AnimalFactory.createAnimal("cat");
		c.eat();
	}
}
public class AnimalFactory {
	/*public static Dog createDog() {
		return new Dog();
	}
	
	public static Cat createCat() {
		return new Cat();
	}*/
	
	//發現方法會定義很多,複用性太差
	//改進
	public static Animal createAnimal(String name) {   //返回的是一個animal類
		if("dog".equals(name)) {
			return new Dog();
		}else if("cat".equals(name)) {
			return new Cat();
		}else {
			return null;
		}
	}
}

二、工廠方法模式概述

    * 工廠方法模式中抽象工廠類負責定義建立物件的介面,具體物件的建立工作由繼承抽象工廠的具體類實現。

1、優點

  • 客戶端不需要在負責物件的建立,從而明確了各個類的職責,如果有新的物件增加,只需要增加一個具體的類和具體的工廠類即可,不影響已有的程式碼,後期維護容易,增強了系統的擴充套件性

2、缺點

  • 需要額外的編寫程式碼,增加了工作量
3、例項:
public interface Factory {      //工廠
	public Animal createAnimal();
}
public abstract class Animal {    //動物類
	public abstract void eat();
}
public class DogFactory implements Factory {   //狗工廠實現工廠
	@Override
	public Animal createAnimal() {
		return new Dog();    //狗工廠建立物件,返回的是animal
	}
}
public class Dog extends Animal {  //狗繼承動物
	@Override
	public void eat() {
		System.out.println("狗吃肉");
	}
}
public class Test {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		DogFactory df = new DogFactory();    //建立狗工廠物件
		Dog d = (Dog) df.createAnimal();     //狗工廠返回的是animal,需要進行強制轉換
		d.eat();                             //狗物件呼叫吃的方法
	} 
}


三、介面卡設計模式-(掌握)

1、什麼是介面卡

  •  在使用監聽器的時候, 需要定義一個類事件監聽器介面.
  •  通常介面中有多個方法, 而程式中不一定所有的都用到, 但又必須重寫, 這很繁瑣.
  • 介面卡簡化了這些操作, 我們定義監聽器時只要繼承介面卡, 然後重寫需要的方法即可.

2、介面卡原理

  • 介面卡就是一個類, 實現了監聽器介面, 所有抽象方法都重寫了, 但是方法全是空的.
  • 介面卡類需要定義成抽象的,因為建立該類物件,呼叫空方法是沒有意義的
  • 目的就是為了簡化程式設計師的操作, 定義監聽器時繼承介面卡, 只重寫需要的方法就可以了.
public class Demo1_Adapter {
	/**
	 * @param args
	 * 介面卡設計模式
	 * 魯智深
	 */
	public static void main(String[] args) {		
	}
}

interface 和尚 {
	public void 打坐();
	public void 唸經();
	public void 撞鐘();
	public void 習武();
}

abstract class 天罡星 implements 和尚 {    //宣告成抽象的原因是,不想讓其他類建立本類物件,因為建立也沒有意義,方法都是空的
	@Override
	public void 打坐() {
	}
	@Override
	public void 唸經() {
	}
	@Override
	public void 撞鐘() {
	}
	@Override
	public void 習武() {
	}	
}

class 魯智深 extends 天罡星 {
	public void 習武() {
		System.out.println("倒拔垂楊柳");
		System.out.println("拳打鎮關西");
		System.out.println("大鬧野豬林");
		System.out.println("......");
	}
}




相關文章