zoukankan      html  css  js  c++  java
  • 工厂模式!@——@

     1 package zzuli.acmen.my.factory;
    2
    3 import java.util.HashMap;
    4 import java.util.Map;
    5
    6 public class Factory {
    7
    8 Map<String,Object> map = new HashMap<String,Object>();
    9
    10 public void setObject(String str){
    11
    12 //反射机制
    13 try {
    14 /*
    15 * 很关键的几行代码。因为我实现了根据字符串生成Object对象
    16 */
    17 Class c = Class.forName(str);
    18 Object o = c.newInstance();
    19 map.put(str, o);
    20 } catch (ClassNotFoundException e) {
    21 // TODO Auto-generated catch block
    22 e.printStackTrace();
    23 } catch (InstantiationException e) {
    24 // TODO Auto-generated catch block
    25 e.printStackTrace();
    26 } catch (IllegalAccessException e) {
    27 // TODO Auto-generated catch block
    28 e.printStackTrace();
    29 }
    30
    31
    32 }
    33
    34 public Object getObject(String str){
    35
    36 Object o = map.get(str);
    37
    38 return o;
    39
    40 }
    41 }
    42
    43 interface Person{
    44
    45 public void say(String str);
    46
    47 }
    48
    49 class One implements Person{
    50
    51 public void say(String str) {
    52 System.out.println("我是男生"+str);
    53
    54 }
    55
    56 }
    57
    58 class Two implements Person{
    59
    60 public void say(String str) {
    61 System.out.println("我是女生"+str);
    62
    63 }
    64
    65 }
     1 package zzuli.acmen.my.factory;
    2
    3 public class Main {
    4
    5 /**
    6 * @param args
    7 */
    8 public static void main(String[] args) {
    9
    10 Factory f = new Factory();
    11 /*
    12 * 自己的工厂类根据一个字符串实现类的子生成;
    13 */
    14 f.setObject("zzuli.acmen.my.factory.One");
    15 f.setObject("zzuli.acmen.my.factory.Two");
    16
    17 /*
    18 * 根据字符串生成相应的Object 对象,并强制转换为相应的对象
    19 */
    20 Person p = (Person)f.getObject("zzuli.acmen.my.factory.One");
    21 p.say("张三");
    22 Person pp = (Person)f.getObject("zzuli.acmen.my.factory.Two");
    23 pp.say("李四");
    24 Person p1 = (Person)f.getObject("zzuli.acmen.my.factory.One");
    25 p1.say("王五");
    26
    27 }
    28
    29 }

    工厂模式之我见,我认为工厂模式是装配把对象的生成从调用的地方解放出来,因此我有了上面的代码!  


  • 相关阅读:
    Android Studio 插件(不定期更新)
    Spring 之 @ComponentScan以及mock Spring MVC
    Spring MVC 之传递模型数据到视图中
    开发笔记
    最小可用 Spring MVC 配置
    Spring 之定义切面尝试(基于 XML)
    Spring 之定义切面尝试(基于注解)
    Spring 之高级装配
    Spring 之混合配置
    Spring 之通过 XML 装配 bean
  • 原文地址:https://www.cnblogs.com/Acmen/p/2362076.html
Copyright © 2011-2022 走看看