`

关于最近学习的创建型设计模式

阅读更多
好吧,为了纪念我失业的这几个月时间,整理一下这段失业时间内的收获。今天这个博客就正式开始投入使用了,下定决心要让这里记录我从今往后的技术历程,工作经历,生活琐事等。第一炮要响亮一点,写点什么呢?最近开始学习GOF的23中设计模式,就举个例子总结一下今天学习的 简单工厂模式,工厂模式,抽象工厂模式还有生产者模式。
简单工厂的本质是对类进行选择创建。
如有一个水果汁工厂,可以生产苹果汁,橙汁等水果。根据客户的口味,可以获得对应的产品。
CLASS水果汁工厂1{
     函数 生产水果汁(水果类型)
    {
     If 类型=苹果
        返回苹果汁
     Else
      ...
    }
}

可能更迷糊了。好吧,如果要举个平时经常看到的实践例子,一般中小项目的DAO的实现会采取这个做法。不过有的时候会使用读取配置文件,通过反射来实现这个工厂类,而不是IF ELSE。

工厂模式本质是将某些实现延迟到子类。
  如果这个水果工厂是一个连锁经营的工厂,总公司负责提供一种经营模式,提供设备,但是不知道分店使用的原料是怎么获得的。
  那么就有一个总工厂类:

CLASS 果汁总工厂{

     保护类型 抽象函数 先获得水果();//因为不知道这个分工厂的进货渠道等,所以每      个 分店自己决定


函数 生产水果汁()
   {
      获得水果();//反正分工厂一定会进货的,不管怎么弄到的货,反正可以使用。
       榨汁;
    }
}



1号分工厂可能在城市

CLASS 1号分工厂 extends 总工厂{

   保护类型  函数 先获得水果(水果类型)
  {
     可能是去收购 也可能是去仓库拿

  }
}



2号可能在乡村

CLASS 2号分工厂 extends 总工厂{

  保护类型   函数 先获得水果(水果类型)
  {
     可能是直接去自己的果园采摘等


  }
}





当父类不清楚子类的某个对象创建的具体实现的时候,可以用工厂模式。把创建延迟到子类对象。如本例中的水果原料,总工厂不能决定货源,只能由分工厂自己去进货。总工厂提供的设备只管生产。
看到这里更 更迷糊了吧,哈..那还是回到日常实践里的例子,struts1的ActionServlet和继承他的Action就是个典型的工厂模式。将每个请求的所需要产生的ActionForward对象的创建延迟到Action类。
ActionServlet就相当于总工厂。每个我们写的ACTION就是分工厂,ActionServlet先执行各种操作后 在调用ACTION类中的execute方法,获得ActionForward对象,然后继续执行调用JSP等操作。
抽象工厂模式
  可能这个工厂还经营有类似果粒橙这样果汁加果肉的饮料。那么客户向工厂订购的果汁就要和果肉对应起来,否则饮料就会变得很怪异,所以这个工厂就需要保证这两个生产的内容是对应的。因此就有下面这个实现,工厂提供的生产接口是对应的。



CLASS 果汁总工厂{

  抽象函数 生产水果汁();//因为不知道有这个分工厂具体经营哪些水果
抽象函数 生产水果肉();//因为不知道有这个分工厂具体经营哪些水果
}


CLASS 1号分工厂 extends 总工厂{

  函数 生产水果汁()
  {
      生产菠萝汁;
  }
函数 生产水果肉()
{
     生产菠萝果粒;
}
}


CLASS 2号分工厂 extends 总工厂{

  函数 生产水果汁()
  {
      生产苹果汁;
  }
函数 生产水果肉()
{
     生产苹果果粒;
}
}

客户只能获得1号工厂对象来生产菠萝果汁+菠萝果肉或者2号工厂对象来生产苹果果汁+苹果果肉。防止出现不匹配。这两个生产方法之间存在依赖关系,否则就退化成工厂模式。
这个我在平时还真没发现什么具体的应用,没法举代码的例子了,如果有请告诉我哦。

生成器模式
 
可能这个工厂还经营由多种果汁调配而成的混合果蔬饮料。各工厂生产果汁,由工厂研究机构进行指导调配而成。

CLASS 工厂研究机构{  //指导者


函数 生产混合果汁过程()
{
工厂生产果汁1;
加热等工艺过程
工厂生产果汁3;
静置等工艺过程
工厂一生产果汁2;
搅拌等工艺过程

}


CLASS 工厂1 {  //构建者
  大桶  //用来装混合果汁
  函数 生产苹果汁()
  {
      生产苹果汁 放入大桶;
  }
函数 生产葡萄汁()
{
     生产葡萄汁 放入大桶
}
函数 生产番茄汁()
{
     生产番茄汁 放入大桶 }

}

函数 获得混合果汁成品()
{
返回大桶;
}




CLASS 工厂2 {  //构建者
  大桶  //用来装混合果汁
  函数 生产菠萝汁()
  {
      生产菠萝汁 放入大桶;
  }
函数 生产西瓜汁()
{
     生产西瓜汁 放入大桶
}
函数 生产椰子汁()
{
     生产椰子汁 放入大桶 }

}

函数 获得混合果汁成品()
{
返回大桶;
}



工厂1和工厂2的生产产品可能不同,具体的生产过程可能也不同,但是他们用来混合成混合果汁的过程是一样的。
一般用在算法过程固定,但是生成的对象或则说内容不同的时候用的。



单例模式 本质是控制实例的个数
单例模式代码中见到的比较多,一般的配置文件的读取后,都会使用单例模式的对象来存放起来,节省开销。  单例模式有懒汉和恶汉式,懒汉 时间换空间,恶汉 空间换时间。
懒汉式如果使用现成同步来保证彻底的单例,会造成运算速度比较慢,有个比较完美的解决方案是 使用静态内部类。例子..如果忘记了,自己搜索去。




如果你不幸看到这里,很抱歉,请您不用纠结的去想这篇内容,因为我自己都被自己的举例弄晕了哈。
  第一篇写创建模式,希望我以后的思想心得会像工厂流水线一样不断涌现。
分享到:
评论

相关推荐

    设计模式迷你手册最近的

    设计模式分为三类:创建型模式、结构型模式和行为型模式。创建型模式关注对象的创建,如单例模式(Singleton)、工厂模式(Factory)和抽象工厂模式(Abstract Factory)。这些模式帮助我们有效地控制实例化过程,使...

    Python掌握设计模式.pdf

    设计模式通常分为三大类:创建型模式、结构型模式和行为型模式。创建型模式涉及对象的创建过程,包括单例模式、工厂模式、建造者模式等。结构型模式关注对象与类的组合,例如适配器模式、组合模式和装饰器模式。行为...

    戏说23种设计模式 基于GOF的设计模式

    工厂模式是一种创建型设计模式,其核心思想是在不指定具体类的情况下创建对象。当系统的某一功能需要根据不同的条件选择不同的实现时,可以采用工厂模式来实现灵活的对象创建。例如,在一个游戏中,玩家可能会遇到...

    C#23种设计模式_示例源代码及PDF

    原始模型模式: 原始模型模式 通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原 型对象的方法创建出更多同类型的对象。 原始模型模式允许动态的增加或减少产品类, 产品 类不需要非得有任何事先...

    C#面向对象设计模式纵横谈(21):(行为型模式) Memento 备忘录模式

    备忘录模式(Memento Pattern)是一种行为设计模式,它允许在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将对象恢复到先前的状态。这种模式在需要撤销/重做功能、...

    algorithms for studying or using 设计模式,算法等的java实现.zip

    设计模式分为三大类:创建型模式(如单例模式、工厂模式、抽象工厂模式、建造者模式、原型模式)、结构型模式(如代理模式、装饰器模式、适配器模式、桥接模式、组合模式、外观模式、享元模式)和行为型模式(如...

    设计模式 的简单示例

    首先,我们需要理解设计模式的基本分类:创建型、结构型和行为型模式。创建型模式关注对象的创建,如单例(Singleton)、工厂方法(Factory Method)和抽象工厂(Abstract Factory)。结构型模式关注如何组合对象和...

    使用MVP设计模式的Cryptocurrency应用程序可以实时跟踪Android和iOS的所有硬币数据 【最近Flutter很火

    标题提及的是一个使用了MVP(Model-View-Presenter)设计模式的Cryptocurrency应用程序,它能够跨平台(Android和iOS)实时追踪各种加密货币的数据。这里的关键点是MVP设计模式以及应用程序对加密货币市场的实时监控...

    react-ReactinpatternsReact开发时使用的设计模式技术列表

    在React开发过程中,为了构建可维护、高效且可扩展的应用程序,开发者经常采用各种设计模式和技术。"react-in-patterns"项目就是一个集大成者,它汇总了React开发中的多种实用模式和技术。以下是对这些模式和技术的...

    Java设计模式课件命令模式.pptx

    命令模式是一种设计模式,属于对象行为型模式,其主要目的是将请求发送者和接收者解耦,使得两者之间没有直接的引用关系。这种模式通过引入命令对象,将一个请求封装成一个独立的对象,使得发送者只需关注如何发送...

    单例模式代码

    最近空闲的时候回顾了一下常用的设计模式,其中单例模式是创建型模式中比较基础的一种设计模式,说起单例模式,想必大家并不模式,我们都知道的是,在单例模式下,能够保证一个类只有一个实例对象,就是说,外部访问...

    以轻松的语言比喻了java的23种模式

    工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在Java编程语言中,工厂模式是解决实例化对象的一种方法,其核心是定义一个用于创建对象的接口,但让实现这个接口的类来决定实例化哪个类。 **比喻...

    (行为型模式) Memento 备忘录模式

    - **《设计模式:可复用面向对象软件的基础》GoF**:本书详细介绍了包括备忘录模式在内的23种设计模式,是学习设计模式的经典之作。 - **《面向对象分析与设计》Grady Booch**:此书提供了深入理解面向对象设计原则...

    复杂工厂缓存结构模式

    复杂工厂模式是一种工厂模式的变体,属于创建型设计模式。它比简单的工厂模式更灵活,可以创建一系列相关的或相互依赖的对象,而无需指定具体类。在复杂工厂模式中,通常有一个工厂类负责根据输入参数或条件来决定...

    高职院校程序设计课程课外学习共同体的构建.pdf

    总而言之,构建高职院校程序设计课程的课外学习共同体是一种富有成效的教育模式。通过结合建构主义、最近发展区理论和人本主义学习理论,不仅能够提高学生的专业技能,还能培养他们的团队协作精神和自主学习能力,...

    JavaScript设计模式之享元模式实例详解

    享元模式是一种优化性能的设计模式,它通过共享对象来减少内存中的对象数量,从而降低内存占用和提高系统效率。在JavaScript中,享元模式通常用于处理大量相似对象的场景,尤其是当这些对象大部分属性相同而只有少量...

    软件设计师最近几年试题

    7. **软件设计原则与模式**:包括单一职责原则、开闭原则、里氏替换原则、依赖倒置原则等设计原则,以及工厂模式、单例模式、观察者模式等常见的设计模式。 8. **法律法规**:软件设计师还需要了解相关的知识产权法...

    [行为型模式] 备忘录模式的理解

    备忘录模式是一种行为设计模式,它允许在不破坏封装性的前提下,捕获和恢复对象的状态。这种模式常用于需要记录对象当前状态以便稍后恢复的情况,例如撤销/重做功能、游戏存档或者复杂表单的数据保存。 在备忘录...

Global site tag (gtag.js) - Google Analytics