zoukankan      html  css  js  c++  java
  • 设计模式抽象工厂模式

    人与肤色

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

    一、类图

    二、代码

     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

  • 相关阅读:
    js用button激活 Alert 元素关闭按钮的交互功能
    js中的$符号代表什么
    js中#代表什么
    amazeui学习笔记--js插件(UI增强)--警告框Alert
    amazeui学习笔记--css(常用组件16)--文章页Article
    amazeui学习笔记--css(常用组件15)--CSS动画Animation
    amazeui学习笔记--css(常用组件14)--缩略图Thumbnail
    amazeui学习笔记--css(常用组件13)--进度条Progress
    amazeui学习笔记--css(常用组件12)--面板Panel
    amazeui学习笔记--css(常用组件11)--分页Pagination
  • 原文地址:https://www.cnblogs.com/Lizhichengweidashen/p/14904642.html
Copyright © 2011-2022 走看看