设计模式精粹

设计模式是软件开发领域的孙子兵法,真正理解、精通、熟记设计模式,在适当的场合采用适当的设计模式来设计和编码,将极大提高代码的健壮性、可扩展性、可维护性,是高手与菜鸟分水岭的显著标志之一。

每一个软件设计和开发人员都必须掌握设计模式。

设计模式种类较多,即使深刻理解娴熟运用,时间久了也容易遗忘,需要时常温习。本文尝试以简短的文字概括各个常用设计模式的精华,不画UML图、不写例子,期望在深刻学习过设计模式的前提下,在遗忘之后,通过阅读本文,可以快速的温习各个设计模式的精华。初学者一般很难直接全部看懂,需提纲挈领后再寻书深究。

一、设计原则

1面向接口编程。预先设计一系列接口,将设计与实现分离,使用时只采用接口;面向对象编程中,尽量多采用接口,而不是继承。

2单一职责原则。设计一个类时,类的功能要单一,只做与其相关的事情。

3开放封闭原则。设计软件系统时,应对扩展开放,对修改封闭:有需求时,可以对现有代码进行扩展,而不是修改已经写好的类。

4最小知识原则。类与类之间应该尽量减少耦合,两个复杂的类之间可以不直接引用打交道,通过简单的第三方媒介来通信即可。

5聚合复用原则。使已经存在的对象成为新对象的一部分;面向对象编程中,尽量使用合成和聚合,尽量不采用继承。

 

二、设计模式

(一)创建型设计模式

1、静态工厂模式。用一个专门的工厂类来负责创建具体的产品对象,工厂返回的对象类型是具体对象的抽象接口。

2、工厂方法模式。每个具体的产品对象由自己所属类型的具体工厂类型来创建,每一个具体工厂类型是一个相同工厂抽象接口的实现。

3、抽象工厂模式。工厂抽象接口定义了相同抽象接口返回类型的多个接口方法,这些接口方法描述了工厂的产品等级结构,这个工厂抽象接口的每个工厂实现则描述了一个产品族。

4、单例模式。一个类只有一个实例,通过静态方法来访问该实例。

5、原型模式。通过对作为原型的对象复制来构建新的对象。

6、创建型模式。定义一个专门的导演者类来构造复杂对象,构造对象时导演者类通过形参传入的创建者接口类型的实例,按照既定的顺序来调用创建者实例提供的接口方法来构造复杂对象的细节。

(二)结构型设计模式

1、装饰模式。抽象装饰类实现装饰接口,同时将该装饰接口类型的对象作为自己的成员,这样抽象装饰类的实现类具体在客户端看来既具有装饰接口的特征可以当着被修饰对象来看待,又由于具有装饰接口类型的实际被修饰对象成员可访问,这样在接口行为上实现对被修改对象的装饰处理。

2、外观模式。将底层功能细节进行组合封装,对外提供更高级的封装接口,外部只与封装接口打交道。

3、享元模式。将具有相同接口类型的细粒度的对象存储在工厂类中,当需要对象时直接从工厂类中获取,达到共享、减少内存的目的。

4、适配器模式。类适配器模式通过继承被适配的对象,在类中提供适配目标的方法来适配目标;对象适配器模式将被适配对象作为自己的成员,在类中通过对被适配对象的访问来提供实适配目标的方法。

5、代理模式。代理对象和被代理对象都实现了相同的接口,代理对象将被代理对象作为自己的成员,客户端直接与代理对象打交道,代理对象在接口访问时根据业务逻辑既可以作自己的代理处理,也可以通过访问被代理成员来作实际的处理。

6、桥接模式。抽象类通过提供抽象方法实现方法的扩展,同时通过将接口类型作为成员实现属性的扩展,在方法和属性两个维度上实现抽象和实现的分离,提高可维护性和扩展性。

7、组合模式。叶子节点和树枝节点都实现相同的接口,接口统一提供树枝节点的访问、遍历方法,叶子节点对于遍历方法可以为空处理,这样在客服端看来叶子节点和树枝节点的访问方法是完全透明的。

(三)行为模式

1、模板方法模式。抽象类中定义一系列的抽象方法,同时提供统一的方法按照既定的业务逻辑依次调用这些抽象方法,这样抽象类的具体实现类只需实现这些分离的抽象方法即可,访问实现类的抽象父类定义的统一方法将具有相同的业务逻辑。

2、观察者模式。被观察的对象中注册有多个具有相同接口类型的观察者对象,当被观察的对象状态有改变时,通过遍历访问这些注册的观察对象的接口方法,通知各个观察者被观察对象的改变,各观察者在接口方法中实现自身的响应处理。

3、状态模式。用户对象将接口类型的状态对象作为自己的成员,同时状态接口类型的接口方法将用户对象作为自己的形参,这样当调用用户对象的方法时,该方法内部将用户对象自身作为参数传递给状态成员,通过调用状态成员的方法来实现反应当前状态的业务处理。

4、策略模式。策略的外部封装类持有接口类型的策略成员,该类提供封装的统一方法来调用策略成员方法,这样通过构造将不同的策略实现类成员的封装类对象,即可得到不同的具体策略返回结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值