设计模式之抽象工厂模式

来源:互联网 发布:java微信红包开发demo 编辑:程序博客网 时间:2024/06/05 13:36

抽象工厂模式

定义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。

从定义中可知,我们是要创建一个接口,而这个接口是干嘛的呢,是为了创建一组相关或者相互依赖的对象,而且我们创建的对象不是具体的类,也就是说我们创建的是一个接口或者一个抽象类。

UML

具体实现

产品代码实现:

interface ProductA {

   void methodA();

}

 

interface ProductB {

   void methodB();

}

 

class ProductA1 implements ProductA{

   public void methodA() {

       System.out.println("产品A系列中1型号产品的方法");

   }

}

 

class ProductA2 implements ProductA{

   public void methodA() {

       System.out.println("产品A系列中2型号产品的方法");

   }

}

 

class ProductB1 implements ProductB{

   public void methodB() {

       System.out.println("产品B系列中1型号产品的方法");

   }

}

 

class ProductB2 implements ProductB{

   public void methodB() {

       System.out.println("产品B系列中2型号产品的方法");

   }

}

public class ConcreteCreator1 implementsCreator{

   public ProductA createProductA() {

       return new ProductA1();

   }

   public ProductB createProductB() {

       return new ProductB1();

   }

}

工厂实现:

public interface Creator {

   ProductA createProductA();

   ProductB createProductB();

}

class ProductB2 implements ProductB{

   public void methodB() {

       System.out.println("产品B系列中2型号产品的方法");

   }

}

public class ConcreteCreator1 implementsCreator{

   public ProductA createProductA() {

       return new ProductA1();

   }

 

   public ProductB createProductB() {

       return new ProductB1();

   }

}


public class ConcreteCreator2 implementsCreator{

   public ProductA createProductA() {

       return new ProductA2();

   }

   public ProductB createProductB() {

       return new ProductB2();

   }

}


public class Client {

   public static void main(String[] args) throws Exception {

       Creator creator = new ConcreteCreator1();

       ProductA productA = creator.createProductA();

       ProductB productB = creator.createProductB();

       productA.methodA();

       productB.methodB();

       

       creator = new ConcreteCreator2();

       productA = creator.createProductA();

       productB = creator.createProductB();

       productA.methodA();

       productB.methodB();

   }

}




原创粉丝点击