• 抽象工厂模式的应用


    一、实验目的:

    1) 掌握抽象工厂模式(Abstract Factory)的特点

    2) 分析具体问题,使用抽象工厂模式进行设计。

    二、实验环境:

    Eclipse

     

     

     

    三、实验内容:

    (写出主要的内容)

    麦当劳(McDonalds)和肯德基(KFC)快餐店都经营汉堡(Hamburg)和可乐(Cole),用JAVA语言实现(C#控制台应用程序实现)这两个快餐店经营产品的抽象工厂模式。绘制该模式的UML图。

    【模式UML图】

     

    【模式代码】

    购物接口以及具体实现类型

    public interface Hamburg {
        public void hb();
    }
    public class MDLHamburg implements Hamburg {
    
        @Override
        public void hb() {
            // TODO Auto-generated method stub
            System.out.println("得到一个MDLHamburg");
        }
        
    }
    public class KDJHamBurg implements Hamburg {
    
        @Override
        public void hb() {
            // TODO Auto-generated method stub
            System.out.println("得到一个KDJHamburg");
        }
    
    }
    public interface Cole {
        public void cl();
    }
    public class MDLCole implements Cole {
    
        @Override
        public void cl() {
            // TODO Auto-generated method stub
            System.out.println("得到一个MDLCole");
        }
    
    }
    public class KDJCole implements Cole {
    
        @Override
        public void cl() {
            // TODO Auto-generated method stub
            System.out.println("得到一个KDJCole");
        }
    
    }

    抽象工厂以及具体工厂

    public interface AbstractFactory {
        public Hamburg getHamburg();
        public Cole getCole();
    }
    public class MDLFactory implements AbstractFactory {
    
        @Override
        public Hamburg getHamburg() {
            // TODO Auto-generated method stub
            return new MDLHamburg();
        }
    
        @Override
        public Cole getCole() {
            // TODO Auto-generated method stub
            return new MDLCole();
        }
    
    }
    public class KDJFactory implements AbstractFactory {
    
        @Override
        public Hamburg getHamburg() {
            // TODO Auto-generated method stub
            return new KDJHamBurg();
        }
    
        @Override
        public Cole getCole() {
            // TODO Auto-generated method stub
            return new KDJCole();
        }
    
    }

    客户端

    public class Client {
            private static AbstractFactory KDJ, MDL;
            private static Hamburg hb1,hb2;
            private static Cole cl1,cl2;
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            KDJ=new KDJFactory();
            hb1=KDJ.getHamburg();
            hb1.hb();
            cl1=KDJ.getCole();
            cl1.cl();
            
            
            MDL=new MDLFactory();
            hb2=MDL.getHamburg();
            hb2.hb();
            cl2=MDL.getCole();
            cl2.cl();
        }
    
    }

    更高级版本的Client

    import java.util.Scanner;
    
    public class SuperClient {
        public static final String KDJHAMBURG = "KDJHamburg";
        public static final String KDJCOLE = "KDJCole";
        public static final String MDLHAMBURG = "MDLHamburg";
        public static final String MDLCole="MDLCole";
        AbstractFactory af=null;//不知道这样写是否可以
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            AbstractFactory af=null;
            Hamburg hb=null;
            Cole cl=null;
            Scanner reader=new Scanner(System.in);
            String type=reader.nextLine();
            if(type.equals(KDJHAMBURG)) {
                af = new KDJFactory();
                hb = af.getHamburg();
                hb.hb();
            }
            else if(type.equals(KDJCOLE)){
                af = new KDJFactory();
                cl = af.getCole();
                cl.cl();
            }
            else if(type.equals(MDLHAMBURG)){
                af= new MDLFactory();
                hb = af.getHamburg();
                hb.hb();
            }
            else if(type.equals(KDJCOLE)){
                af = new MDLFactory();
                cl = af.getCole();
                cl.cl();
            }else{
                af=null;
                System.out.println("请输入正确的的食品订单");
            }
        }
    
    }

    运行截图

    四、心得体会:

    通过这次实验,让我学会了掌握抽象工厂模式(Abstract Factory)的特点,分析具体问题,使用抽象工厂模式进行设计。抽象工厂模式主要适用于以下情况:一系列要独立于它的产品的创建、组合和表示时。、一个系统要由多个产品系列中的一个来配置时。当要强调一系列相关的产品对象的设计以便进行联合使用时。当要提供一个产品类库,而只要显示它们的接口而不是实现时。

    抽象工厂模式中包含:

    (1)一系列互相有关联的产品类,这些产品类有相同的结构。

    (2)一系列实的工厂类,实现由该抽象工厂方向实现的接口,每个实工厂类产生一组相关的产品类对象。

     

    作者:马家升
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    C#Redis集合set
    C#Redis列表List
    C#Redis字符串
    C#Redis初识
    2016-2017年终总结及新年计划
    Eclipse调试cas server 3.5.2.1
    CAS连接微软活动目录的配置方法
    SSO之安装CAS Server
    Tomcat之配置HTTPS
    Tomcat SSL配置 Connector attribute SSLCertificateFile must be defined when using SSL with APR解决
  • 原文地址:https://www.cnblogs.com/majiasheng/p/10664011.html
Copyright © 2020-2023  润新知