模式学习的自我理解和疑惑(1)

原创 2004年07月15日 21:50:00
 
?工厂模式就是专门负责将大量有共同接口的类实例化,而且不必事先知道每次是要实例化哪一个类的模式。
?工厂模式有以下几种形态:
 简单工厂(Simple Factory)模式
工厂方法(Factory Method)模式
抽象工厂(Abstract Factory)模式
 
1.简单工厂模式
   父类: 产品 (接口)  
  子类:  具体的产品(继承产品)
  工厂类: 负责创建具体的产品
 
 
在简单工厂模式中,一个工厂类处于对产品类实例化调用的中心位置上,它决定那一个产品类应当被实例, 如同一个交通警察站在来往的车辆流中,决定放行哪一个方向的车辆向那一个方向流动一样。
比如水果类,有多种水果
园丁(工厂)会种它们.通过工厂得到不同的水果实例
 
2. 工厂方法模式
 
?工厂方法模式是简单工厂模式的进一步抽象化和推广。
?它比简单工厂模式聪明的地方在于, 它不再作为一个具体的交通警察的面貌出现,而是以交通警察局(工厂)的面貌出现。 具体的警察成为工厂方法的执行者
?
?工厂方法模式里不再只由一个工厂类决定哪一个产品类应当被实例化,这个决定被交给子类去作。
某种具体工厂创建某种具体产品(产品不单一,多种产品)
比如植物类,分水果类,蔬菜类
园丁(工厂)分水果类的园丁(只种水果),蔬菜类的园丁
3.抽象工厂模式
   工厂分区域,产品分区域
   一种区域具体的工厂不再只会创建一个种具体产品,而是能创建一个区域多种具体产品.
   比如植物类,分水果类,蔬菜类,水果类和蔬菜类可以是北方种的;或南方种的.
    园丁(工厂)就有南方人的园丁,北方人的园丁,他们都会种水果和蔬菜.
 
4.单态模式
 
?一个单态类只可有一个实例。这样的类常用来进行资源管理。
?
?例如:很多软件都有数据库,一般而言, 整个软件应当使用一个联接通道,而不是任意在需要时就新打开一个联接通道。
?
通常用getInstance()得到实例.
 
特性:
 
1、单态类只可有一个实例。

2、它必须自己创立自己这唯一的一个实例。

3、它必须给所有其它的类提供自己这一实例。

  最后,单态类在理论和实践上都并非限定只能有"一个"实例,而是很容易推广到任意有限个实例的情况。
 
饿汉式单态类
 
?由于构造器是私有的,因此此类不能被继承
?package com.javapatterns.singleton.demos;
public class EagerSingleton {
    private
EagerSingleton() { }
    public static EagerSingleton getInstance() {
 
    return m_instance;
    }
    private static final EagerSingleton m_instance = 
                                               new EagerSingleton();
}
 
懒汉式单态类
 
懒汉式单态类在第一次被引用时将自己实例化
?构造子是私有的,因此此类不能被继承
?public class LazySingleton {
?  private LazySingleton() {}
? /**
?   * 静态工厂方法,返还此类的唯一实例。因为创建实例的时候, 
?   * 涉及到资源初始化,所以最好使用同步机制。
? */
?  synchronized public static LazySingleton getInstance() {
?      if (m_instance == null) {
?        m_instance = new LazySingleton();
?      }
?      return m_instance;
?    }
?
?   private static LazySingleton m_instance = null;
?}
 
两种单态类的比较
?饿汉式单态类在自己被加载时就将自己实例化。
?
?单从资源利用效率角度来讲,这是比懒汉式单态类稍差些。
?
?从速度和反应时间角度来 讲,则比懒汉式单态类稍好些。
?
?懒汉式单态类在实例化时必须处理好在多个线程同时首次引用此类时,实例化函数内部关键段的访问限制问题。
 
单态经常在数据库连接时使用 
?
版权声明:本文为博主原创文章,转载请注明来源。

ufldl 深度学习入门 第三发: 自我学习与无监督特征学习

目的:使用稀疏自编码器提取特征,使用softmax做分类器,实现手写字符识别分类。 好处:相比较前面直接使用softmax分类器(92%识别率),能够提升分类器的效果,达到98%以上。 体会:通过自学...
  • sloanqin
  • sloanqin
  • 2015年09月28日 22:10
  • 718

计算机可以这样玩—自我学习,自我思维,自我工作(编程)

如果让计算机产生自我意识,那一定件很好玩的事情。               我在想,怎么让计算机产生自我意识和自我学习的思维能力呢,特别是在工业集群中的应用。               由这个...
  • luozhonghua2014
  • luozhonghua2014
  • 2014年08月06日 22:06
  • 1162

NOIP2017Day1T1小凯的疑惑

Description 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素。每种金币小凯都有无数个。在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的。现在小凯想知道在无法准确支付的物...
  • white_elephant
  • white_elephant
  • 2017年11月22日 20:48
  • 354

JAVA 学习 自我总结

学习总结: 孔子曰学而时习之 不亦悦乎 。学习了新的东西,一定要及时练习和总结,并多次回想记忆,这样才能将知识记忆的牢固; 之前我学习东西只知道贪多,想一口吃一个胖子;但是每次都是事倍功半,这样又...
  • u010582345
  • u010582345
  • 2016年04月08日 23:58
  • 357

七步理解深度学习

七步理解深度学习 By Matthew Mayo     翻译by LonelySoul 网上有很多的深度学习的免费学习资源,但是可能会对从哪里开始有些困惑。七步内从对深度神经...
  • riverflowrand
  • riverflowrand
  • 2016年02月20日 20:31
  • 748

初级Java程序员 - 自我总结

本人只是一个刚毕业入行不久的初级程序员,从开始对代码的复杂度、可读性,性能一点不考虑的小白变成一名能够带着思想去写代码的程序员。下面我就从我写过的代码,踩过的坑中总结一下属于自己的经验。 1、命名规...
  • u010579316
  • u010579316
  • 2016年12月02日 17:36
  • 387

深度学习UFLDL教程翻译之自我学习

一、概述        假设我们有足够强大的学习算法,得到较好结果的其中一种最靠谱的方法是给算法提供更多的数据。这验证了在机器学习的那句格言:“有时候获胜的不是谁有最好的算法,而是谁有最多的数据。” ...
  • hunterlew
  • hunterlew
  • 2016年08月18日 22:31
  • 1270

2017noip提高组复赛day1小凯的疑惑题解

①题目 ◆描述 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素。每种金币小凯都有 无数个。在不找零的情况下,仅凭这两种金币,有些物品他是          无法准确支付的。现在小凯...
  • Helenal
  • Helenal
  • 2017年12月16日 16:31
  • 239

例题 小凯的疑惑

小凯的疑惑【Noip2017普及组day1第一题】 先看下题:  小凯手中有两种面值的金币,两种面值均为正整数且彼此互素。每种金币小凯都有无数个。 在不找零的情况下,仅凭这两种金币,有些...
  • qq_40216330
  • qq_40216330
  • 2017年12月27日 20:20
  • 35

个人对Redis的一些简单理解

这是个人在这边写的第二篇文章 毕业一年半了,从合肥转战来到上海,最大变化的是头发稀少了好多...... 今天写写redis,以及集群方面的东西    redis的作用百度很多,确实...
  • qq_15057147
  • qq_15057147
  • 2016年12月22日 14:31
  • 450
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:模式学习的自我理解和疑惑(1)
举报原因:
原因补充:

(最多只允许输入30个字)