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