??xml version="1.0" encoding="utf-8" standalone="yes"?>久久美女艺术照精彩视频福利播放,99国产精品国产精品毛片,一区二区三区中文http://www.aygfsteel.com/wyz191/category/19355.html走向一条通往JAVA的不归\...zh-cnWed, 14 May 2008 12:12:22 GMTWed, 14 May 2008 12:12:22 GMT60Template Method模板Ҏ模式 http://www.aygfsteel.com/wyz191/articles/template_method.htmljava_蝈蝈java_蝈蝈Thu, 08 May 2008 09:39:00 GMThttp://www.aygfsteel.com/wyz191/articles/template_method.htmlhttp://www.aygfsteel.com/wyz191/comments/199294.htmlhttp://www.aygfsteel.com/wyz191/articles/template_method.html#Feedback0http://www.aygfsteel.com/wyz191/comments/commentRss/199294.htmlhttp://www.aygfsteel.com/wyz191/services/trackbacks/199294.html
行ؓ型模式涉及到法和对象间职责的分配。将注意力从控制{Ud对象间的联系方式上来?br />
       行ؓ模式分ؓQ?span style="font-weight: bold; color: red">行ؓcL?/span>?span style="font-weight: bold; color: red">行ؓ对象模式?span style="font-weight: bold">行ؓcL式?span style="color: brown">l承机制在类间分z行?/span>Q?span style="font-weight: bold">行ؓ对象模式使用对象复合而不是ѝ?/span>

Template Method模板Ҏ模式

       Template Method模板Ҏ模式介绍Q?br />
       Template Method模板Ҏ模式是一U行为型模式Q具体点说是行ؓcd模式。主要解军_软g构徏q程中,对于某一Q务,常常有稳定的整体操作l构Q但各个子步骤却有很多改变的需求,或者由于固有的原因而无法和d的整体结构同时实现?br />
       GoF《设计模式》中说道Q定义一个操作中的算法的骨架Q而将一些步骤gq到子类中。Template Method使得子类可以不改变一个算法的l构卛_重定义该法的某些特定步?br />
       Template Method模式的结?br />

       定义场景

       单看l构不好理解Q我们来l合E序q行分析。现在定义一个场景:我想大家都玩q极品飞车(我相当喜Ƣ)。游戏中有很多的汽RQ但是从操作角度看大同小异。无非是hQStartUpQ、行ӞRunQ、停车(StopQ等{行为。汽车行驶的动作之间可能存在着差异Q例如:手动档和自动档,但是接口是一LQ换句话_基本都是q几个动作。结合Template Method模式讲就是在q个E序中,l构Q对汽R的操作)是稳定的Q但是变化在于各个子步骤Q操作行为的具体实现Q?br />
       E序实现与结构分?br />
       首先我们需要一个汽车的抽象c(l构图中的AbstractClassQ?br />
       public abstract class AbstractCar

    {

        protected abstract string StartUp();

        protected abstract string Run();

        protected abstract string Stop();

 

        public void DriveOnTheRoad()

        {

            Console.WriteLine(StartUp());

            Console.WriteLine(Run());

            Console.WriteLine(Stop());

        }

}

在这D代码中Q抽象方法StartUp、Run、Stop叫做primitive operationQ原语操作)Q它们是在子cM的扩展点Q例如我们要~写一辆BORA的实玎ͼ在他l承AbstractCar后,可以在这几个primitive operation上进行自׃步骤的实现?br />
AbstractCar中的DriveOnTheRoadҎ叫做template methodQ模板方法)Qtemplate method用primitive operation定义一个算法,是相对稳定的部分。(子类中重新定义primitive operationQ?br />
    然后我们要实C辆BORA汽RQ结构图中的ConcreteClassQ?br />
    public class BORA : AbstractCar //l承

    {

        protected override string StartUp()

        {

            return "BORA is StartUp";

        }

 

        protected override string Run()

        {

            return "BORA is Running";

        }

 

        protected override string Stop()

        {

            return "BORA is Stoped";

        }

}

接下来我们进行客L序的实现

class Program

    {

        static void Main(string[] args)

        {

            ClientApp.Drive(new BORA());

            Console.Read();

        }

}

public class ClientApp

    {

        public static void Drive(AbstractCar car)

        {

            car.DriveOnTheRoad();

        }

}

q行l果如下Q?br />
BORA is StartUp

BORA is Running

BORA is Stoped

   

Template Method要点

1?nbsp; Template Method模式是一U非常基性的设计模式Q在面向对象pȝ中有着大量的应用。它用最z的机制Q?span style="font-weight: bold; color: red">虚函数的多态?/span>Qؓ了很多应用程序框架提供了灉|的扩展点Q是代码复用斚w的基本实现结构?br />
2?nbsp; 除了可以灉|应对子步骤的变化外,“Don't call me.Let me Call you”的反向控制结构是Template Method的典型应用?#8220;Don’t call me.Let me Call you”是指一个父c调用一个子cȝ操作Q而不是相反?br />
3?nbsp; 在具体实现方面,被Template Method调用的虚Ҏ可以h实现Q也可以没有M实现Q抽象方法、纯虚方法)Q但一般推荐将它们讄为protectedҎ。可以没有具体实现的Ҏ应该UCؓhook operationQ钩子操作)Q提供了~省的行为,子类可以在必要时q行扩展?br />
4?nbsp; 量减少primitive operationQ因为需要重新定义的操作多Q客L序就长

java_蝈蝈 2008-05-08 17:39 发表评论
]]>
Singleton 模式http://www.aygfsteel.com/wyz191/articles/Singleton.htmljava_蝈蝈java_蝈蝈Fri, 19 Jan 2007 06:36:00 GMThttp://www.aygfsteel.com/wyz191/articles/Singleton.htmlhttp://www.aygfsteel.com/wyz191/comments/94932.htmlhttp://www.aygfsteel.com/wyz191/articles/Singleton.html#Feedback0http://www.aygfsteel.com/wyz191/comments/commentRss/94932.htmlhttp://www.aygfsteel.com/wyz191/services/trackbacks/94932.htmlSingleton-------唯一Q?br />        以前是商标满天飞Q相同的商标隑օ造成侉|Q直从有商标保护法后Q就保证了不会再产生W家企业使用相同的商标;

说到Singleton,׃能不提全局变量。过L们反对全局变量Qؓ什么呢Q全局变量一般存在三个问题:

<!--[if !supportLists]-->1.      命名冲突Q也叫名字污?/span><!--[endif]-->

<!--[if !supportLists]-->2.      初始化顺序依赖问题?/span><!--[endif]-->

<!--[if !supportLists]-->3.      q程代码耦合问题?/span><!--[endif]-->

对于W一个问题,其实解决很简单,通过命名规范可以有效解决。另外,借助语言机制也容易解冻I例如C++?/span>namespace, class?/span>struct的静态数据成员?/span>Java?/span>C#Ҏ不允许全局变量Qƈ且引入包机制Q都可以~解甚至消除q一影响Q至,Singleton对该问题的解军_度ƈ不超q这些语a提供的内建机制?/span>

初始化顺序依赖问题是一个相当微妙的问题。借助?/span>Singleton, 我们可以强制某些对象按需创徏Q避免初始化序依赖D的问题。然而,初始化顺序是一个雷区,我们必须心翼地绕q去Q但首先不应该通过实现技术来规避问题Q而应该调整设计,让初始化序问题Ҏ不出现才是上{。第二,某些情况下,我们实需要规避初始化序问题Q我们也需要清醒地认识到该实现手段影响到的代码范围Q受其媄响的部分单一好?/span>

q程代码耦合Q这是我们反对全局变量的核心问题。Q何长距离的耦合都将D代码的可L下降,q而可能媄响代码结构,Dl构僵化Q无力应对因需求变化导致的l构调整。很遗憾Q?/span>Singletonq不能对q个问题有Q何帮助。当我们回避全局变量的时候,事实上,我们也规避了上述的三个问题。可是,如果我们不能审慎C?/span>Singleton׃重新落入全局变量的核心陷׃厅R?/span>

名称 Singleton
l构
意图 保证一个类仅有一个实例,q提供一个访问它的全局讉K炏V?/font>
适用?/font>
  • 当类只能有一个实例而且客户可以从一个众所周知的访问点讉K它时?
  • 当这个唯一实例应该是通过子类化可扩展的,q且客户应该无需更改代码p使用一个扩展的实例时?


Singleton模式主要作用是保证在Java应用E序中,一个类Class只有一个实例存在?

在很多操作中Q比如徏立目?数据库连接都需要这L单线E操作?/p>

q有, singleton能够被状态化; q样Q多个单态类在一起就可以作ؓ一个状态仓库一样向外提供服务,比如Q你要论坛中的帖子计数器Q每ơ浏览一ơ需要计敎ͼ单态类能否保持住这个计敎ͼq且能synchronize的安全自动加1Q如果你要把q个数字怹保存到数据库Q你可以在不修改单态接口的情况下方便的做到?/p>

另外斚wQSingleton也能够被无状态化。提供工h质的功能,

Singleton模式׃ؓ我们提供了这样实现的可能。用Singleton的好处还在于可以节省内存Q因为它限制了实例的个数Q有利于Java垃圾回收Qgarbage collectionQ?br />
我们常常看到工厂模式中类装入?class loader)中也用Singleton模式实现?因ؓ被装入的cd际也属于资源?br />

如何使用?
一般Singleton模式通常有几UŞ?

public class Singleton {

  private Singleton(){}

  //在自己内部定义自׃个实例,是不是很奇怪?
  //注意q是private 只供内部调用

  private static Singleton instance = new Singleton();

  //q里提供了一个供外部讉K本class的静态方法,可以直接讉K  
  public static Singleton getInstance() {
    return instance;   
   }
}

 

W二UŞ?

public class Singleton {

  private static Singleton instance = null;

  public static synchronized Singleton getInstance() {

  //q个Ҏ比上面有所改进Q不用每ơ都q行生成对象Q只是第一ơ     
  //使用时生成实例,提高了效率!
  if (instance==null)
    instanceQnew Singleton();
  return instance;   }

}

 

使用Singleton.getInstance()可以讉K单态类?/p>

上面W二中Ş式是lazy initializationQ也是说第一ơ调用时初始SingletonQ以后就不用再生成了?/p>

注意到lazy initialization形式中的synchronizedQ这个synchronized很重要,如果没有synchronizedQ那么用getInstance()是有可能得到多个Singleton实例。关于lazy initialization的Singleton有很多涉及double-checked locking (DCL)的讨论,有兴者进一步研I?/p>

一般认为第一UŞ式要更加安全些?br />



java_蝈蝈 2007-01-19 14:36 发表评论
]]>
վ֩ģ壺 ʻ| | | Ϫ| ʼ| ɽ| ˮ| | | | | ɾ| ̨ʡ| ³| ɽ| | | | | п| ɿ| | ԭ| | ̨| ľ| | մ| Dz| | | | ˳| կ| ڰ| ˫| ̫| | | Է| |