1. 程式人生 > >android設計模式——抽象工廠模式

android設計模式——抽象工廠模式

定義:為建立一組相關或者是互相以來的物件提供一個介面,而不需要指定他們的具體的類,

使用場景:

在任何需要生成複雜物件的地方,都可以使用工廠方法模式.

應用舉例: 不同牌子的汽車工廠生產不同的汽車

類圖:

  1. AbstractFactory,抽象的工廠類
  2. ConcreteFactory,具體的工廠類
  3. Product,抽象的產品類
  4. ConcreteProduct,具體的產品類

關鍵程式碼:在一個工廠裡聚合多個同類產品。

優點:

  1. 當一個產品族中的多個物件被設計成一起工作時,它能保證客戶端始終只使用同一個產品族中的物件。

缺點:

  1. 產品族擴充套件非常困難,要增加一個系列的某一產品,既要在抽象的 Creator 里加程式碼,又要在具體的裡面加程式碼。
abstract class AbstractProductA{
	public abstract void method();
}
	
abstract class AbstractProductB{
	public abstract void method();
}

class ConcreteProductA1 extends AbstractProductA{
	@Override
	public void method() {
		// TODO 自動生成的方法存根
		System.out.println("具體產品A1的製作方法");
	}
}

class ConcreteProductA2 extends AbstractProductA{

	@Override
	public void method() {
		// TODO 自動生成的方法存根
		System.out.println("具體產品A2的製作方法");
	}
	
}

class ConcreteProductB1 extends AbstractProductB{

	@Override
	public void method() {
		// TODO 自動生成的方法存根
		System.out.println("具體產品B1的製作方法");
	}
	
}
class ConcreteProductB2 extends AbstractProductB{

	@Override
	public void method() {
		// TODO 自動生成的方法存根
		System.out.println("具體產品B2的製作方法");
	}
	
}

abstract class AbstractFactory{
	public abstract AbstractProductA creatAbstractProductA();
	public abstract AbstractProductB creatAbstractProductB();
}
	
class ConcreteFactory1 extends AbstractFactory{

	@Override
	public AbstractProductA creatAbstractProductA() {
		// TODO 自動生成的方法存根
		return new ConcreteProductA1();
	}

	@Override
	public AbstractProductB creatAbstractProductB() {
		// TODO 自動生成的方法存根
		return  new ConcreteProductB1();
	}
	
}
	
class ConcreteFactory2 extends AbstractFactory{

	@Override
	public AbstractProductA creatAbstractProductA() {
		// TODO 自動生成的方法存根
		return new ConcreteProductA2();
	}

	@Override
	public AbstractProductB creatAbstractProductB() {
		// TODO 自動生成的方法存根
		return  new ConcreteProductB2();
	}
	
}

 

public static void main(String[] args) {
		// TODO 自動生成的方法存根
		
		
		AbstractFactory factory1 = new ConcreteFactory1();
		AbstractFactory factory2 = new ConcreteFactory2();
		AbstractProductA productA= factory1.creatAbstractProductA();
		AbstractProductB productB = factory2.creatAbstractProductB();
		productA.method();
		productB.method();
				
	}