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();
				
	}

猜你喜欢

转载自blog.csdn.net/l1094125040/article/details/83625518