抽象工厂模式的应用

一、实验目的:

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)一系列实的工厂类,实现由该抽象工厂方向实现的接口,每个实工厂类产生一组相关的产品类对象。

 

posted on 2019-04-07 08:50  马家升  阅读(1058)  评论(0编辑  收藏  举报