人与肤色
使用抽象工厂模式,完成下述产品等级结构:
一、类图
二、代码
1、C++
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }
2、Java
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 package test; 2 3 abstract public class Human { 4 public void makeMan() { 5 6 } 7 public void makeWoman() { 8 9 } 10 11 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 package test; 2 3 public class White extends Color { 4 @Override 5 public void makeWhite() { 6 System.out.println("我是白种人"); 7 } 8 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 package test; 2 3 public class Black extends Color { 4 @Override 5 public void makeBlack() { 6 System.out.println("我是黑种人"); 7 } 8 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 package test; 2 3 public class Yellow extends Color { 4 @Override 5 public void makeYellow() { 6 System.out.println("我是黄种人"); 7 } 8 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }
三、结果截图:
1、C++
2、Java