设计模式之创建型模式

简单工厂模式

将各个需要实例化的对象各自成类,然后用简单工厂类来实例化他们。这样降低了类之间的耦合性,易于添加和修改程序。需要添加功能的话只要添加对象类即可。以计算器为例,运算符为易变部分,将各个运算符单独成类,这样添加运算符只需添加一个类就可以了,对于其他类没有影响。符合开闭原则。


工厂方法模式

与简单工厂方法类似,但是这里将各个运算符的实例化过程也单独放在一个类里,这样就把工厂类分解了。在简单工厂模式中,我们添加一个运算符的话需要添加一个运算符类和在工厂中添加一个相应的case.这就意味着我们改动了简单工厂类。没有完全符合开闭原则。工厂方法模式,要添加一个运算符的话,加一个运算符类和一个实例化该类的工厂,只是添加类,完全符合开闭原则。


抽象工厂模式

抽象工厂模式是对于同一类中又有不同情况,例如数据库可分为sql Access .而具体应用时又有sqluser.accessuser.sqldepartment.accessdepartment.这时如果用工厂方法的话就需要四个工厂类。要是更多的话就很难处理了,对于sqlusersqldepartment都是sql类型的可以使用一个抽象的工厂来产生他们俩个。对于accessuseraccessdepartment可以使用抽象的access工厂来产生。

图中工厂1相当于sqlfactory A1相当于sqlUserB1相当于sqldepartment.


建造者模式

讲一个复杂对象的构建与他的表示分离,使得同样的构建构成可以创建不同的表示。Director负责指挥builder,以控制builder建造对象。ConcreteBuilder实现BuilderconcreteBuilder方法的参数不同可以建造不同的实例。

使用建造者模式,他的类中的建造方法必须足够普遍,以便为各种类型的具体建造者构造。建造的过程是稳定的,如人,都要建造head body arm leg.只不过这些要建造的具体东西不同。这时使用建造者模式可以使建造代码与表示代码分离(具体的建造代码是在concreteBuilder中,而控制建造的Director是不知道它的。要是需要改变一个产品的内部表示,只要在定义一个具体的建造者就可以啦!)


原型模式

首先建一个原型,然后让具体的类来继承这个原型。使用clone方法来克隆原型。

Pulic override Prototype Clone()

{

Return (Prototype)this.memberwiseClone()

}

这样就可以简单的实现克隆啦。

注意这里只是浅表副本。方法是创建一个新对象,然后将当前对象的非静态字段复制到该新对象。如果字段是值类型,则对该字段逐位复制。如果是引用类型,则复制引用但不复制引用的对象;因此原始对象及其副本引用同一个对象。(如果是引用类型,则创建的新对象指向的是引用的对象,意味着在执行的时候,新对象回去找他所指向的对象,这个对象现在是什么,克隆得到的就是什么。而值类型则不同,它是按位复制,克隆的时候对象的值就给了新对象,执行的时候是新对象在执行)

深复制:我的理解:原来的浅复制只是给了新对象一个地址,而深复制是实现clone方法,把原来对象的值赋给新对象。这样就由地址变为了值!


单例模式

保证一个类只有一个实例。让类自身保存它的唯一实例,当需要实例化的时候只管调用,是否进行实例化由类自己判断。将实例化的对象保存在静态变量中,以后就可以不用实例化而得到它。

这里需要注意,多线程时的单例。使用Lock (syncRoot)加锁,此时程序只允许一个线程进入。双重锁定:即先判断实例是否存在再加锁处理。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值