设计模式抽象工厂模式

人与肤色

使用抽象工厂模式,完成下述产品等级结构:

一、类图

二、代码

 1、C++

  1 #include <iostream>
  2 
  3 using namespace std;
  4 
  5 
  6 //抽象产品类 男人
  7 class Man
  8 {
  9 public:
 10     virtual void makeM() = 0;
 11 };
 12 //具体产品类 白色男人
 13 class WhiteMan : public Man
 14 {
 15 public:
 16     void makeM()
 17     {
 18         cout << "这是一个白种男人" << endl;
 19     }
 20 };
 21 //具体产品类 黄色男人
 22 class YellowMan : public Man
 23 {
 24 public:
 25     void makeM()
 26     {
 27         cout << "这是一个黄种男人" << endl;
 28     }
 29 };
 30 //具体产品类  黑色男人
 31 class BlackMan : public Man
 32 {
 33 public:
 34     void makeM()
 35     {
 36         cout << "这是一个黑种男人" << endl;
 37     }
 38 };
 39 
 40 //抽象产品类 女人
 41 class Woman
 42 {
 43 public:
 44     virtual void makeW() = 0;
 45 };
 46 //具体产品类 白色女人
 47 class WhiteWoman : public Woman
 48 {
 49 public:
 50     void makeW()
 51     {
 52         cout << "这是一个白种女人" << endl;
 53     }
 54 };
 55 //具体产品类 黄色女人
 56 class YellowWoman : public Woman
 57 {
 58 public:
 59     void makeW()
 60     {
 61         cout << "这是一个黄种女人" << endl;
 62     }
 63 };
 64 //具体产品类 黑色女人
 65 class BlackWoman : public Woman
 66 {
 67 public:
 68     void makeW()
 69     {
 70         cout << "这是一个黑种女人" << endl;
 71     }
 72 };
 73 //抽象工厂类  肤色
 74 class Color
 75 {
 76 public:
 77     virtual Man* produceMan() = 0;
 78     virtual Woman* produceWoman() = 0;
 79 };
 80 //具体工厂类 黄色
 81 class Yellow : public Color
 82 {
 83 public:
 84     Man* produceMan()
 85     {
 86         return new YellowMan();
 87     }
 88     Woman* produceWoman()
 89     {
 90         return new YellowWoman();
 91     }
 92 };
 93 //具体工厂类 白色
 94 class White : public Color
 95 {
 96 public:
 97     Man* produceMan()
 98     {
 99         return new  WhiteMan();
100     }
101     Woman* produceWoman()
102     {
103         return new  WhiteWoman();
104     }
105 };
106 //具体工厂类 黑色
107 class Black : public Color
108 {
109 public:
110     Man* produceMan()
111     {
112         return  new BlackMan();
113     }
114     Woman* produceWoman()
115     {
116         return new BlackWoman();
117     }
118 };
119 
120 int main(int argc, char* argv[])
121 {
122     Color* yellow = new Yellow();
123     Man* man_yellow = yellow->produceMan();
124     Woman* woman_yellow = yellow->produceWoman();
125 
126     Color* black = new Black();
127     Man* man_black = black->produceMan();
128     Woman* woman_black = black->produceWoman();
129 
130     Color* white = new White();
131     Man* man_white = white->produceMan();
132     Woman* woman_white = white->produceWoman();
133 
134     man_yellow->makeM();
135     woman_yellow->makeW();
136     cout << "*********************" << endl;
137     man_white->makeM();
138     woman_white->makeW();
139     cout << "*********************" << endl;
140     man_black->makeM();
141     woman_black->makeW();
142 }
C++抽象工厂模式

 2、Java

 1 package test;
 2 
 3 public class Client {
 4     public static void main(String []args) {
 5         Human human;
 6          Man man=new Man();
 7          Woman woman=new Woman();
 8          human=man.getMan("black");
 9          human.makeMan();
10          
11          
12          human=woman.getWoman("black");
13          human.makeWoman();
14          System.out.println("********************");
15          human=man.getMan("yellow");
16          human.makeMan();
17          
18          
19          human=woman.getWoman("yellow");
20          human.makeWoman();
21          System.out.println("********************");
22          human=man.getMan("white");
23          human.makeMan();
24 
25          human=woman.getWoman("white");
26          human.makeWoman();
27     }
28 
29  
30 }
Client.Java
 1 package test;
 2 
 3 abstract public class Human {
 4     public void makeMan() {
 5         
 6     }
 7     public void makeWoman() {
 8         
 9     }
10 
11 }
Human.java
 1 package test;
 2 
 3 public class Man extends Human{
 4 @Override
 5 public void makeMan() {
 6     System.out.println("我是一个男人");
 7 }
 8 public Man getMan(String color) {
 9     Man man=new Man();
10     if(color.equals("yellow")) {
11         man=new YellowMan();
12     }
13 if(color.equals("white")) {
14     man=new WhiteMan();
15     }
16 if(color.equals("black")) {
17     man=new BlackMan();
18 }
19 return man;
20 }
21 }
Man.java
 1 package test;
 2 
 3 public class Woman extends Human{
 4 @Override
 5 public void makeWoman() {
 6     System.out.println("我是一个女人");
 7 }
 8 public Woman getWoman(String color) {
 9     Woman man=new Woman();
10     if(color.equals("yellow")) {
11         man=new YellowWoman();
12     }
13 if(color.equals("white")) {
14     man=new WhiteWoman();
15     }
16 if(color.equals("black")) {
17     man=new BlackWoman();
18 }
19 return man;
20 }
21 }
Woman
 1 package test;
 2 
 3 abstract public class Color {
 4 public void makeWhite() {
 5     
 6 }
 7 public void makeYellow() {
 8     
 9 }
10 public void makeBlack() {
11     
12 }
13 }
Color.java
1 package test;
2 
3 public class White extends Color {
4 @Override
5 public void makeWhite() {
6     System.out.println("我是白种人");
7 }
8 }
White.java
1 package test;
2 
3 public class Black extends Color {
4 @Override
5 public void makeBlack() {
6     System.out.println("我是黑种人");
7 }
8 }
Black
1 package test;
2 
3 public class Yellow extends Color {
4 @Override
5 public void makeYellow() {
6     System.out.println("我是黄种人");
7 }
8 }
Yellow.java
 1 package test;
 2 
 3 public class WhiteMan extends Man {
 4 
 5     @Override
 6 public void makeMan() {
 7     
 8     System.out.println("我是白种男人");
 9     
10 }
11 
12 }
WhiteMan.java
 1 package test;
 2 
 3 public class WhiteWoman extends Woman {
 4 
 5 
 6 public void makeWhiteWoman() {
 7 
 8     System.out.println("我是白种女人");
 9     
10 }
11 
12 }
WhiteWoman.java
 1 package test;
 2 
 3 public class BlackMan extends Man {
 4 
 5     @Override
 6 public void makeMan() {
 7     
 8     System.out.println("我是黑种男人");
 9 
10 }
11 
12 }
BlackMan.java
 1 package test;
 2 
 3 public class BlackWoman extends Woman {
 4 
 5 
 6 public void makeBlackWoman() {
 7 
 8     System.out.println("我是黑种女人");
 9     
10 }
11 
12 }
BlackWoman.java
 1 package test;
 2 
 3 public class YellowMan extends Man {
 4 
 5     @Override
 6 public void makeMan() {
 7     
 8     System.out.println("我是黄种男人");
 9     
10     
11 }
12 
13 }
YellowMan.java
 1 package test;
 2 
 3 public class YellowWoman extends Woman {
 4 
 5 
 6 public void makeYellowWoman() {
 7     
 8     System.out.println("我是黄种女人");
 9     
10     
11 }
12 
13 }
YellowWoman.java

三、结果截图:

1、C++

2、Java

原文地址:https://www.cnblogs.com/Lizhichengweidashen/p/14904642.html