创建型模式总结

 

创建型模式抽象了实例化过程,将一个系统独立于于 如何创建、组合和表示他的那些对象。

一个类创建模式使用继承改变被实例化的类。而一个对象创建型模式将实例化委托给另一个对象。

 

所有的创建型模式都是两个旋律

一是将系统使用哪些具体类的信息封装起来 。

二是  隐藏这些类的实例是如何被创建和组织的,外界对于这些对戏那个只知道他们共同的接口,不清楚具体的实现细节。

 ====================================================

常见的五种 创建模式

抽象工厂

工厂方法

原型模式

单列模式

建造者模式

工厂模式的三种方式详见上篇博客 工厂三姐妹

  

单列模式:

保证一个类只有一个实例,并提供一个访问它的全局访问点

 

 通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象,一个最好的方法就是,让类自身负责保存它的唯一实例,这个类可以保证没有其他实例可以被创建,并且可以提供一个访问该实例的方法:

该方式是

Private Static Singleton Instance

Private Singleton()

{

}  //以上就防止了外界利用New创建此类实例的可能。 是对唯一实例的受控访问。

 

注意

细节问题: 多线程中,多个线程同事访问Singleton 类,调用GetInstance()方法,会造成多个实例, 可以给进程一把锁来处理。

Lock 是确保一个线程位于代码的临界区时,另一个线程不进入临界区。如果其他线程试图进入锁定的代码,则它将一直等待,知道该对象被释放。

 

示例代码

if (instance == null)

            {

                lock (Root)

                {

                    if (instance == null)

                    {

                        instance = new Singleton();

                    }

                }

            }

            return instance;

 

此处用了两个instance,当instance为null,并且同时有两个线程调用Getinstance()方法时,它们将都通过第一重instance=null判断,然后由于lock机制,这两个线程则只能一个进入,另一个在外排队,必须要期中一个进入并出来后,另一个才能进入。而此时如果没第二重的判断,则第一个i线程创建了实例后,而第二个还是继续在创建新势力。这样就没有达到单列目的。

 

个人小结: 单列模式(SingletonPattern)解决的是实体对象的个数问题,其他的都是解决New 所带来的耦合关系

 

=============================

 

建造者模式  

创建者模式可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使用一个建造过程生成具有不同内部表象的产品对象。

就是说是用同样的建造过程可以创建不同的产品。

实例  建造小人

 

 

Director 是构建一个使用Bulder接口的对象

若要改变一个产品的内部表示,只要再定义一个具体的建造者就可以了/

 

关键点: 主要用于创建一些复杂的对象. 这些对象内部构建建的建造顺序是稳定的.但对象内部的建造通常是复杂变化的

比较:

同抽象工厂模式类似,两者都返回一些方法和对象组成的类,主要区别在于,抽象工厂返回系列的相关类,而建造者则根据向其提交的逐步构造出复杂对象

 

========================================

原型模式:

用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象

关键点是具有克隆自身的方法:Clone(),利用已经存在的对象来克隆一个新的对象。

课本实例  : 简历 的复印

细节问题

浅复制与深复制

Memberwise()方法是这样的。如果字段是值类型的,则对该字段执行逐位复制,如果字段是引用类型,则复制引用但不复制引用的对象

浅复制: 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象。

深复制:深复制把引用对象的变量指向复制过的新对象,而不是原有的被引用的对象。

如: 数据集对象DataSet,它就有Clone()方法和Copy()方法。Clone方法用来复制DataSet的结构,但不复制DataSet的数据。实现了浅复制。Copy()方法不但复制结构,也复制数据,就是深复制。

 

总结:

       根据所提供的数据,工厂模式被用来从一些相似的类中选择并返回某个类的一个实例;

       抽象工厂模式被用来返回几组类中的一组,在某些情况下,其实际上返回该组类的一个工厂;

       生成器模式根据其要表示的数据,把一些对象组装成一个新的对象,通常使用工厂来实现对对象的组装方式的选择;

       当创建新的实例需要更多的代价时,原型模式复制或克隆现有的类而不是创建新的实例;

       单件模式是这样的一种模式,其确保对象有且只有一个实例,并且确保可获得到该实例的全局访问。

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值