Design Pattern-abstract factory pattern (abstactfactory) Creation Pattern

Source: Internet
Author: User

The typical structure of the abstractfactory mode is as follows:

 

 

 

 

The abstractfactory mode provides interfaces for creating a group of (multi-class) related or dependent objects, the factory mode, as I analyzed in the relevant documents, provides interfaces for creating a class of objects or delays the creation of objects into subclass. As you can see, the abstractfactory mode is usually implemented in the factory mode (concretefactory1 ).

 

 

 

In the abstractfactory mode, the key is to encapsulate the creation of this group of objects into a concretefactory, maintaining such a creation class is much easier than maintaining the creation process of N-related objects.

 

 

------------------------- Product. h ---------------------------------
# Pragma once

 

Class abstractproduproducta
{
Public:
Virtual ~ Abstractproducta () = 0;
Protected:
Abstractproducta ();
};

 

Class abstractproductb
{
Public:
Virtual ~ Abstractproductb () = 0;
Protected:
Abstractproductb ();
};

 

Class producta0: Public abstractproducta
{
Public:
Producta0 ();
~ Producta0 ();
};

 

Class producta1: Public abstractproducta
{
Public:
Producta1 ();
~ Producta1 ();
};

Class productb0: Public abstractproductb
{
Public:
Productb0 ();
~ Productb0 ();
};

 

Class productb1: Public abstractproductb
{
Public:
Productb1 ();
~ Productb1 ();
};

------------------------- Product. cpp -------------------------------
# Include "stdafx. H"
# Include "product. H"
# Include <iostream>
Using namespace STD;

 

Abstractproducta: abstractproducta (){}

Abstractproducta ::~ Abstractproducta (){}

Abstractproductb: abstractproductb (){}

Abstractproductb ::~ Abstractproductb (){}

 

Producta0: producta0 ()
{
Cout <"producta0 constructor" <Endl;
}

Producta0 ::~ Producta0 (){}

 

Productb0: productb0 ()
{
Cout <"productb0 constructor" <Endl;
}

Productb0 ::~ Productb0 (){}

 

Producta1: producta1 ()
{
Cout <"producta1 constructor" <Endl;
}

Producta1 ::~ Producta1 (){}

 

Productb1: productb1 ()
{
Cout <"productb1 constructor" <Endl;
}

Productb1 ::~ Productb1 (){}
------------------------- Factory. h ---------------------------------
# Pragma once

Class abstractproducta;
Class abstractproductb;

Class abstructfactory
{
Public:
Virtual ~ Abstructfactory () = 0;
Abstructfactory ();

Virtual abstractproducta * createproducta () = 0;
Virtual abstractproductb * createproductb () = 0;
};

Class

Concretefactory0: Public abstructfactory
{
Public:
Concretefactory0 ();
~ Concretefactory0 ();

Abstractproducta * createproducta ();
Abstractproductb * createproductb ();
};

 

Class concretefactory1: Public abstructfactory
{
Public:
Concretefactory1 ();
~ Concretefactory1 ();

Abstractproducta * createproducta ();
Abstractproductb * createproductb ();
};

------------------------- Factory. cpp -------------------------------
# Include "stdafx. H"
# Include "product. H"
# Include "factory. H"

Abstructfactory: abstructfactory (){}

Abstructfactory ::~ Abstructfactory (){}

Concretefactory0: concretefactory0 (){}
Concretefactory0 ::~ Concretefactory0 (){}

 

Abstractproducta * concretefactory0: createproducta ()
{
Return new producta0;
}

 

Abstractproductb * concretefactory0: createproductb ()
{
Return new productb0;
}

Concretefactory1: concretefactory1 (){}
Concretefactory1 ::~ Concretefactory1 (){}

 

Abstractproducta * concretefactory1: createproducta ()
{
Return new producta1;
}

 

Abstractproductb * concretefactory1: createproductb ()
{
Return new productb1;
}
------------------------- Main. cpp ----------------------------------
# Include "stdafx. H"
# Include "product. H"
# Include "factory. H"
# Include <iostream>

Using namespace STD;

Int main ()
{
Concretefactory0 * fac0 = new concretefactory0;
Concretefactory1 * fac1 = new concretefactory1;

Abstractproducta * proa0 = fac0-> createproducta ();
Abstractproductb * prob0 = fac0-> createproductb ();
Abstractproducta * proa1 = fac1-> createproducta ();
Abstractproductb * prob1 = fac1-> createproductb ();

Delete prob1;
Delete proa1;
Delete prob0;
Delete proa0;
Delete fac1;
Delete fac0;

Return 0;
}
-------------------------------------------------------------------

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.