AbstractFactory

public interface Animal {
/**所有動物都會吃*/
 public void eat();
}
public class Tiger implements Animal {
 public void eat() {
  System.out.println("老虎要吃飯!");
 }
 public void run() {
  System.out.println("老虎要跑步!");
 }
}
public class Parrot implements Animal {
 public void eat() {
  // TODO Auto-generated method stub
  System.out.println("鸚鵡要吃飯");
 }
 public void fly() {
  System.out.println("鸚鵡要飛翔");
 }
====================================

public interface AbstractFactory {
 Tiger createTiger();
 Dolphin createDolphin();
 Parrot createParrot();
}
==============================
public class AsiaTiger extends Tiger {
 public void run() {
  System.out.println("亞洲虎想跑步");
 }
 public void eat() {
  System.out.println("亞洲虎想吃飯");
 }
}
public class AsiaParrot extends Parrot{
 public void eat() {
  // TODO Auto-generated method stub
  System.out.println("亞洲鸚鵡要吃飯");
 }
 public void fly() {
  System.out.println("亞洲鸚鵡要飛翔");
 }
}
public class AsiaDophin extends Dolphin {
 public void swim() {
  System.out.println("亞洲海豚想跑步");
 }
 public void eat() {
  System.out.println("亞洲海豚想吃飯");
 }
}
public class AsiaFactory implements AbstractFactory {
 public Dolphin createDolphin() {
  // TODO Auto-generated method stub
  return new AsiaDophin();
 }
 public Parrot createParrot() {
  // TODO Auto-generated method stub
  return new AsiaParrot();
 }
 public Tiger createTiger() {
  // TODO Auto-generated method stub
  return new AsiaTiger();
 }
}
 
=====================================
public class AfricaTiger extends Tiger{
 public void run()
 {
  System.out.println("非洲虎想跑步");
 }
 public void eat()
 {
  System.out.println("非洲虎想吃飯");
 }
}
public class AfricaParrot extends Parrot{
 public void eat() {
  // TODO Auto-generated method stub
  System.out.println("非洲鸚鵡要吃飯");
 }
 public void fly() {
  System.out.println("非洲鸚鵡要飛翔");
 }
}
public class AfricaDophin extends Dolphin {
 public void swim() {
  System.out.println("非洲海豚想跑步");
 }
 public void eat() {
  System.out.println("非洲海豚想吃飯");
 }
}

public class AfricaFactory implements AbstractFactory {
 public Dolphin createDolphin() {
  // TODO Auto-generated method stub
  return new AfricaDophin();
 }
 public Parrot createParrot() {
  // TODO Auto-generated method stub
  return new AfricaParrot();
 }
 public Tiger createTiger() {
  // TODO Auto-generated method stub
  return new AfricaTiger();
 }
}
 
=====================================================
 
public class Client {
 /**
  * @param args
  * @throws IllegalAccessException
  * @throws InstantiationException
  * @throws ClassNotFoundException
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  AbstractFactory factory = new AfricaFactory();
  Tiger tiger = factory.createTiger();
  tiger.eat();
  tiger.run();
  Dolphin dolphin = factory.createDolphin();
  dolphin.eat();
  dolphin.swim();
  Parrot parrot = factory.createParrot();
  parrot.eat();
  parrot.fly();
  factory = new AsiaFactory();
  tiger = factory.createTiger();
  tiger.eat();
  tiger.run();
  dolphin = factory.createDolphin();
  dolphin.eat();
  dolphin.swim();
  parrot = factory.createParrot();
  parrot.eat();
  parrot.fly();
 }
}
定義:客戶端要創建一些產品,而這些產品又歸屬不同產品類別,可以使用抽象工廠模式,抽象工廠類負責定義創建對象的接口,這一系列對象的創建工作由實現抽象工廠的具體工廠類來具體完成;
原理:四部分組成,抽象工廠類、實現抽象工廠類的具體類、抽象類、實現抽象類的具體類
 
優點:1、客戶端不負責對象創建,把任務交給了具體的工廠類;2、當一系列相互關聯的產品被設計到一個工廠類時候,客戶端調用變得非常簡單;
缺點:有新的產品加進來,需要修改抽象工廠類的設計
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章