• 我对设计模式的理解


          很久很久以前,我问我的朋友:“现在有什么好书可以研究研究的啊?”“设计模式啊。”他不假思索的回答我。想想也是,设计模式确实是一本经典的书,于是乎我又开始了《设计模式》这本书的阅读过程。本人对于设计模式的理解有限,而且限于个人能力,说实在的,在开始看设计模式这本书的时候,我就已经有些力不从心了,而且又了放弃的念头。因为翻开书第一页,我就已经被弄懵了。开篇第一个模式,我已经吃不透了,你觉得我还有兴趣继续看下去吗?答案显而易见,当然不看了,难道找打击不成?

         在平时开发的时候,会经常看到一些模式的应用,虽然不是很理解为什么这么做,但是既然大家都这么做,估计应该有其原因吧。最近看到工厂模式,其实我是很不理解为什么要用工厂模式的。既然可以通过一个类的构造函数来构造一个类的实例,为什么还要用工厂呢?目前为止唯一我能够想到的原因就是,用工厂模式可以方便管理在整个程序中某一个对象的所有实例。因为对象的实例都是通过工厂生产出来的。但是如果在写代码的时候,我没有用这个工厂去生产,而是直接用类的构造函数new了一个类的实例出来,那工厂岂不是做不到管理所有类的实例了?于是我认为,既然用工厂模式来生产类的对象了,那就不应该允许用户直接new出对象来。那怎么才能让用户不能new对象呢?对了,就是让对象的构造函数为私有的。但是如果构造函数是私有的,工厂又怎么生产呢?这不是矛盾的很么?那么就让构造函数为protected吧,然后再让工厂继承自对象。但是java是不允许多继承的,那怎么办呢?这个时候,我想到了友元,但是java好像没有友元啊?啊,C++的友元真伟大,不过再伟大在java这也没有用,哎。带着这个问题,我思考了一会儿,几分钟后,终于得到了答案。于是我设计出了如下的几个类:

      1: class Factory{
    
      2:     static public ArrayList<A> arrA;
    
      3:     static public ArrayList<B> arrB;
    
      4:     public A createA(){
    
      5:         return A.createA();
    
      6:     }
    
      7:     public B createB(){
    
      8:         return B.createB();
    
      9:     }
    
     10: }
    
     11: 
    
     12: class A{
    
     13:     private A(){}
    
     14:     static public A createA(){
    
     15:         A a = new A();
    
     16:         Factory.arrA.add(a);
    
     17:         return a;
    
     18:     }
    
     19:     
    
     20: }
    
     21: 
    
     22: class B{
    
     23:     private B(){}
    
     24:     static public B createB(){
    
     25:         B b = new B();
    
     26:         Factory.arrB.add(b);
    
     27:         return b;
    
     28:     } 
    
     29: }

    以上两个类A、B都不能通过构造函数来构造自己,而是通过类自己的一个静态函数来创建,在创建类的同时,把类的实例放到Factory中的静态成员变量中,这样来实现利用Factory来统一管理所有A、B对象的目的。

    做完这些之后,我突然又在想,我这样做的目的是什么?难道真的只是为了统一管理所有的类的实例吗?这样做有意义吗?这些问题,我自己到目前为止很难回答,之后在以后的开发过程中慢慢体验了。工厂模式真可谓是“博大精深”,各种各样的应用都值得研究。说实在的,我对设计模式的理解很浅薄很浅薄,也就这些而已。而且,这些理解都未必跟当初设计工厂的人一致,我只是把这些当做随笔记下来,如果有哪位大侠路过,希望不吝赐教,吾将感激不尽!

  • 相关阅读:
    js实现快速排序
    使用NodeList
    变量提升问题
    使用Location对象查询字符串参数
    一天一小段js代码(no.2)
    一天一小段js代码(no.1)
    JS闭包中的this对象
    JS数组去重
    FreeCodeCamp----Intermediate Algorithm Scripting解法
    关于表单验证
  • 原文地址:https://www.cnblogs.com/malloc/p/1977166.html
Copyright © 2020-2023  润新知