用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);




参考技术A public class AFactory
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 编写程序写出简单的工厂模式?的主要内容,如果未能解决你的问题,请参考以下文章

[大话设计模式]学习笔记——简单工厂模式

《大话设计模式》有感----简单工厂模式

编写高质量代码:改善Java程序的151个建议(第6章:枚举和注解___建议88~92)

用java编写一个简单计算器

5道简单的JAVA编程题(高分悬赏)

自己写的程序有必要用单例吗