设计模式二--工厂模式

工厂方法

工厂方法定义:定义一个用于创建对象的接口,并且让其子类决定实例化到哪一个类,工厂方法使一个类的实例化延迟到子类

工厂方法角色

1: 抽象工厂角色(Creator)
该角色是工厂方法模式的核心,任何创建对象的工厂类必须实现这个接口

public interface Creator{
  /**
    * 工厂方法,创建产品(对象)的时候输入参数类型即可
    */
  public <T extends Product> T factory(Class<T> c);
}

2:具体工厂角色(Concrete Creator)
该角色实现了Creator接口,受应用程序逻辑控制,应用程序调用此类以获得具体要创建的产品

  public class ConcreteCreator implements Creator{
      
      @override
      public <T extends Product> T factory(Class<T> c){
          Product product = null;
          try{
              product = (Product) Class.forName(c.getName.newInstance());
          }catch(Exception e){
               
          }
          return (T)product;
      }
  }

3:抽象产品角色(Product)
该角色负责定义对外产品的共性,实现对产品的最高抽象定义

 public interface Product{
    //所有产品公共类方法
    public void method1();
    public void method2();
}

4:具体产品角色
该角色是实现了抽象产品接口的具体类,是产品的具体实例

  public class ConcreteProduct implements Product{
        //实现接口方法
       @override
       public void method1(){
          System.out.println("ConcreteProduct.method1()"); 
       }
       @override
       public void method2(){
          System.out.println("ConcreteProduct.method2()")
       }
  }

具体调用代码

这里演示具体如何调用到以上定义的产品

public class Demo{
  public static void main(String [] args ){
    //得到工厂
    Creator creator = new ConcreteCreator();
    //得到具体产品
    Product product = creator.factory(ConcreteProduct.class);
    //调用产品的方法
    product.method1();
    product.method2();
  }
}

工厂方法的优点

1:良好的封装性,代码结构清晰,每个产品对应一个工厂类,所有实例创建均由工厂负责完成
2:比较容易扩展,新增产品或者修改部分产品的业务逻辑并不会改变其创建和调用方式
3:屏蔽了产品类,无论产品如何变化,调用者始终通过接口调用
4:高度抽象,有利于解除耦合

工厂方法使用场景

1:可以替代new关键字
2:当需要灵活的可扩展的框架的时候,可以优先考虑工厂模式
3:可以使用在异构项目中,如webservice与一个非java项目交互,可减少与外围系统耦合
4:可以使用在测试驱动开发的框架下,测试的时候可以避免强耦合关系导致的问题

工厂模式的扩展

1:简单工厂模式
2:多工厂模式
3:替代单例模式
4:延迟初始化

注:以上内容,后期再做补充,在这里不详细做讨论,后期补充链接

参考资料:设计模式之禅(二)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,012评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,628评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,653评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,485评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,574评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,590评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,596评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,340评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,794评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,102评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,276评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,940评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,583评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,201评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,441评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,173评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,136评论 2 352

推荐阅读更多精彩内容

  • 一、工厂模式介绍 工厂模式专门负责将大量有共同接口的类实例化。工厂模式可以动态决定将哪一个类实例化,不必事先知道每...
    QuantRuu阅读 757评论 0 51
  • 设计模式概述 在学习面向对象七大设计原则时需要注意以下几点:a) 高内聚、低耦合和单一职能的“冲突”实际上,这两者...
    彦帧阅读 3,741评论 0 14
  • 一、工厂模式介绍 工厂模式专门负责将大量有共同接口的类实例化。工厂模式可以动态决定将哪一个类实例化,不必事先知道每...
    端木轩阅读 12,700评论 1 20
  • 工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。通常我们所说的工厂模式是指工厂方法模...
    zfylin阅读 1,313评论 0 7
  • 生命陪伴心语系统: (当下)此刻就是我享受爱,体验爱和表达爱的最大机会。 (过程)深呼吸一,二,三,我看见了我的情...
    白文菊阅读 252评论 0 0