抽象工厂模式-java实现

抽象工厂模式

Provide an interface for creating families of related or dependent objects without specifying their concrete classes.为创建一组相关或相互依赖的对象提供一个接口,而且无需制定它们的具体类。

抽象工厂模式的类图

abstract_factory.png

代码参考

 /**
* 抽象产品A
*/
public abstract class AbstractProductA{
   public abstract void method();
}

/**
* 抽象产品B
*/
public abstract class AbstractProductB{
   public abstract void method();
}

/**
* 具体产品A1
*/
public class ConcreteProductA1 extends AbstractProductA{

   @Override
   public void method() {
       System.out.println(getClass().getSimpleName()+".method");
   }
}
/**
* 具体产品A2
*/
public class ConcreteProductA2 extends AbstractProductA{

   @Override
   public void method() {
       System.out.println(getClass().getSimpleName()+".method");
   }
}

/**
* 具体产品B1
*/
public class ConcreteProductB1 extends AbstractProductB{

   @Override
   public void method() {
       System.out.println(getClass().getSimpleName()+".method");
   }
}

/**
* 具体产品B2
*/
public class ConcreteProductB2 extends AbstractProductB{

   @Override
   public void method() {
       System.out.println(getClass().getSimpleName()+".method");
   }
}

/**
* 抽象工厂
*/
public abstract class AbstractFactory{
   public abstract AbstractProductA createProductA();
   public abstract AbstractProductB createProductB();
}

/**
* 具体的工厂1
*/
public class ConcreteFactory1 extends AbstractFactory{

   @Override
   public AbstractProductA createProductA() {
       return new ConcreteProductA1();
   }

   @Override
   public AbstractProductB createProductB() {
       return new ConcreteProductB1();
   }
}

/**
* 具体的工厂2
*/
public class ConcreteFactory2 extends AbstractFactory{

   @Override
   public AbstractProductA createProductA() {
       return new ConcreteProductA2();
   }

   @Override
   public AbstractProductB createProductB() {
       return new ConcreteProductB2();
   }
}

public static void main(String[] args){
  AbstractFactory factory1 = new ConcreteFactory1();
   factory1.createProductA().method();
   factory1.createProductB().method();

   AbstractFactory factory2 = new ConcreteFactory2();
   factory2.createProductA().method();
   factory2.createProductB().method();
}

抽象工厂的角色

  • AbstractProduct: 抽象的产品,一般有固定多个。
  • ConcreteProduct: 产品的实现。
  • AbstractFactory: 抽象工厂,定义一组创建产品的方法,每个方法对应创建一个中产品。
  • ConcreteFactory:具体的实现,创建具体的产品对象

抽象工厂的特点

  • 优点就是分离接口和实现。
  • 缺点是就是创建的类比较大,扩充产品的时候比较困难。

参考

  • 《设计模式之禅》
  • 《Android源码设计模式解析实战》
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值