zoukankan      html  css  js  c++  java
  • 抽象工厂模式的C++、Java实现

    1、抽象工厂模式UML

    图1. 抽象工厂模式的UML

     2、C++实现

      C++实现类图为:

    图2. 抽象工厂模式的C++实现类图

      其中,AbstractFactory的实现代码为:

     1 //抽象工厂类基类。
     2 class AbstractFactory
     3 {
     4 public:
     5     AbstractFactory();
     6     ~AbstractFactory();
     7 
     8     //创建具体的产品的抽象工厂方法。
     9     //创建A类对象。
    10     virtual ProductA * CreateProductA() = 0;
    11 
    12     //创建B类产品对象。
    13     virtual ProductB * CreateProductB() = 0;
    14 };

      ConcreteFactoryA的实现代码为:

     1 class ConcreteFactory1 :
     2     public AbstractFactory
     3 {
     4 public:
     5     ConcreteFactory1();
     6     ~ConcreteFactory1();
     7 
     8     //创建ConcreteProductA1的抽象工厂方法。
     9     ProductA * CreateProductA();
    10 
    11     //创建ConcreteProductA1的抽象工厂方法。
    12     ProductB * CreateProductB();
    13 
    14 };//end class ConcreteFactoryA
    15 
    16 
    17 ProductA * ConcreteFactory1::CreateProductA()
    18 {
    19     ProductA * pa = new ConcreteProductA1();
    20     return pa;
    21 }//end method CreateProductA
    22 
    23 ProductB * ConcreteFactory1::CreateProductB()
    24 {
    25     ProductB * pb = new ConcreteProductB1();
    26     return pb;
    27 }//end method CreateProductB

      其中,ConcreteFactory2的代码与ConcreteFactory1的相似,不再列出。

    3、Java的实现

      Java实现的类视图为:

    图3. 抽象工厂模式的Java实现类视图

      其中,AbstractFactory的代码为:

     1 //抽象工厂类。
     2 public interface AbstractFactory {
     3 
     4     //创建A类产品的抽象工厂方法。
     5     public abstract ProductA CreateProductA();
     6     
     7     //创建B类产品的抽象工厂方法。
     8     public abstract ProductB CreateProductB();
     9     
    10 }//end interface AbstractFactory

      ConcreteFactory1的代码为:

     1 public class ConcreteFactory1 implements AbstractFactory {
     2 
     3     //创建ConcreteProductA1的对象。
     4     @Override
     5     public ProductA CreateProductA() {
     6         // TODO Auto-generated method stub
     7         return new ConcreteProductA1();
     8     }//end method CreateProductA
     9 
    10     //创建ConcreteProductB1的对象。
    11     @Override
    12     public ProductB CreateProductB() {
    13         // TODO Auto-generated method stub
    14         return new ConcreteProductB1();
    15     }//end method CreateProductB
    16 
    17 }//end class ConcreteFactory1

      ConcreteFactory2的代码与ConcreteFactory1的相似,在此不再列出。

    4、点击下载源码

  • 相关阅读:
    CodeForces-455A Boredom
    UVA-12627 Erratic Expansion
    汉诺塔系列问题
    CodeForces-999D Equalize the Remainders
    CodeForces-1061D TV Shows
    CodeForces-1061B Views Matter
    UVALive-7261 Xiongnu's Land
    HDU-4990 Reading comprehension
    -------------------------------用MyBatis处理表与表之间的关联关系----------------------------------
    -------------计算机里面算法-----------
  • 原文地址:https://www.cnblogs.com/minbaba/p/6366126.html
Copyright © 2011-2022 走看看