23种设计模式分别如下

创建型:
        1. 单件模式(Singleton Pattern)
        2. 抽象工厂(Abstract Factory)
        3. 建造者模式(Builder)
        4. 工厂方法模式(Factory Method)
        5. 原型模式(Prototype)
结构型:
        6. 适配器模式(Adapter Pattern)
        7. 桥接模式(Bridge Pattern)
        8. 装饰模式(Decorator Pattern)
        9. 组合模式(Composite Pattern)
       10. 外观模式(Facade Pattern)
       11. 享元模式(Flyweight Pattern)
       12. 代理模式(Proxy Pattern)
       13. 模板方法(Template Method)
       14. 命令模式(Command Pattern)
       15. 迭代器模式(Iterator Pattern)
行为型:
       16. 观察者模式(Observer Pattern)
       17. 解释器模式(Interpreter Pattern)
       18. 中介者模式(Mediator Pattern)
       19. 职责链模式(Chain of Responsibility Pattern)
       20. 备忘录模式(Memento Pattern)
       21. 策略模式(Strategy Pattern)
       22. 访问者模式(Visitor Pattern)
       23. 状态模式(State Pattern)

-------------------------------------------------------------------------------------------------

单件模式

这是用的最多的模式,每一个正式的软件都要用它,全局配置、唯一资源、还有一个就是所有的工厂我都设计为单件模式,因此它的使用量大于工厂模式和抽象工厂模式之和。

Singleton   用于需要确保在系统中仅存在类的一个实例时,例如全局状态保持类或工具类...

Singleton模式的实现基于两个要点:

1)不直接用类的构造函数,而另外提供一个Public的静态方法来构造类的实例。通常这个方法取名为Instance。Public保证了它的全局可见性,静态方法保证了不会创建出多余的实例。

2)将类的构造函数设为Private,即将构造函数"隐藏"起来,任何企图使用构造函数创建实例的方法都将报错。这样就阻止了开发人员绕过上面的Instance方法直接创建类的实例。

Singleton   分   Eager   initialization   和   Lazy   initialization   两种...

Eager   initialization   例子...

public   class   Singleton
{
        private   static   Singleton   instance   =   new   Singleton();

        public   static   Singleton   Instance()
        {
                return   instance;
        }
}

Lazy   initialization   例子...

public   class   Singleton
{
        private   static   Singleton   instance   =   null;

        public   static   Singleton   Instance()   {
                if   (instance   ==   null)   {
                      instance   =   new   Singleton();
                }
                return   instance;
        }
}

Eager   initialization   可能会造成资源的不合理分配,而   Lazy   initialization   则在每次取得实例引用时,会占用多余的时间...

不正确地使用   Singleton   模式可能会带来很多麻烦,尤其是在分布式系统中...

但如果正确地运用   Singleton   模式会提升系统效率...

-----------------------------------------------------------------------------------------------------------------------------------------------------
工厂模式和抽象工厂模式

  为了在程序代码中避免出现大量的New,因此我编写的软件代码这两三年基本都使用了工厂,由于深受受王咏武大侠关于舍熊掌取小鱼的影响,因此我较多地选用工厂模式,感觉确实有扩展需要的情况下才使用抽象工厂模式,其实工厂模式就是一个抽象工厂的特例,扩展为抽象工厂也非常容易。

适配器模式

适配器模式有两种类的适配器和对象适配器,对象适配器更多一些,对象适配器的优点在很多大侠的著作了已经论述n次了,我这里不多啰嗦,我用的较多的原因还有一个,我从C++转到C#,由于C#不支持多重继承,我又不比较懒,较少定义interface,因此大多数情况下用C#时也只能使用对象适配器模式了。其实适配器和装饰模式功能上有很大的相似性,在下面的装饰模式中加以论述。 

装饰模式

也叫油漆工模式,装饰模式和适配器模式相似都是用来利用现成代码加以调整来满足新的需求,其实采用设计模式的目的之一就是复用,这两个模式正是复用的体现。当你要用这两种模式的时候都是为你现有软件新增新的功能,一般情况下,如果你是让你的软件新增新的功能操作,你一般要用装饰模式,你如果要为软件新增功能支持,你最好选择适配器模式,你如果想为你的类新增操作你用装饰模式,你如果要引入其他来源的现成代码,你用适配器模式。 

观察者模式

  这个模式我用的多一个原因就是它可以实现事件功能,当然在C#中可以直接使用事件,但是在C++中却是用可以用此模式发挥的淋漓尽致了,网上曾经的一个考题(猫大叫一声,主人醒来,耗子跑开),就是使用这个模式的最好应用。 

外观模式

开发就是能复用的地方就复用,这样才能节省资源,提高效率,外观模式也是一个提供复用其他现成代码的解决方案,你需要实现一个功能,可能现成的代码中就有此功能,但是现成代码可能远远多于你所需要的功能,此时你把这些功能封装起来,再重新提供一个你所需要的接口,这就是这个模式的精髓所在。

你可能感兴趣的:(设计模式)