用java 编写程序写出简单的工厂模式?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用java 编写程序写出简单的工厂模式?相关的知识,希望对你有一定的参考价值。
java中工厂模式分为:
简单工厂模式(Simple Factory)
2. 工厂方法模式(Factory Method)
3. 抽象工厂模式(Abstract Factory)
每种方法的实现不同
提供一个简单工厂模式的案例:
public abstract class Woman
private String mySkill;
public String getMySkill()
return mySkill;
public Woman()
//System.out.println("我是女人");
public void setMySkill(String mySkill)
this.mySkill = mySkill;
----------------------------
public class LovelinessWoman extends Woman
/*
* 可爱型女人
*/
public LovelinessWoman()
String mySkill="撒过娇、出过轨、勾引领导下过水";
this.setMySkill(mySkill);
-----------------------------
public class SteelinessWoman extends Woman
/*
* 冷酷型女人
*/
public SteelinessWoman()
String mySkill="装过神、弄过鬼,跟别人老公亲过嘴";
this.setMySkill(mySkill);
--------------------------------------
public class WomanMakeFactory
public Woman findWoman(int typeID)
switch (typeID)
case 1:
return new LovelinessWoman();
case 2:
return new VirtuousWoman();
case 3:
return new SteelinessWoman();
default:
return null;
public Woman findWoman(String type) throws ClassNotFoundException, InstantiationException, IllegalAccessException
/*
* Type t = Type.GetType("SimpleFactory." + type);
* Woman wm =
* (Woman)Activator.CreateInstance(t); return wm;
*/
String string="cn.jbit.design.simplefactory."+type;
Class c = Class.forName(string);
Woman wm = (Woman) c.newInstance();
return wm;
-------------------------
调用
public class Test2
/**
* @param args
* @throws IllegalAccessException
* @throws InstantiationException
* @throws ClassNotFoundException
*/
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException
Scanner input=new Scanner(System.in);
boolean sel=false;
do
System.out.println("请选择你要找的女人的类型");
System.out.println("LovelinessWoman:可爱型女人 VirtuousWoman:善良型女人 SteelinessWoman:冷酷型女人");
String typeid=input.next();
WomanMakeFactory factory = new WomanMakeFactory();
Woman wm=factory.findWoman(typeid);
System.out.println("该类型女人的新标准:");
System.out.println(wm.getMySkill());
System.out.println("还想看看别的类型吗?y代表想,n代表再也不想了");
sel=input.next().equals("y");
while (sel);
private static instance = new AFactory();
private AFactory()
public static AFactory getInstance()
return instance;
public A getA(String typeInfo)
if(typeInfo.equals("XX"))
return new Son1OfA();
else
return new Son2OfA();
使用方法:FactoryA factory = FactoryA.getInstance();
A a = factory.getA("type");本回答被提问者采纳
抽象工厂模式的应用
一、实验目的:
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)一系列实的工厂类,实现由该抽象工厂方向实现的接口,每个实工厂类产生一组相关的产品类对象。
以上是关于用java 编写程序写出简单的工厂模式?的主要内容,如果未能解决你的问题,请参考以下文章