软件构造的设计模式

----创建型模式----

简单工厂模式

当有一组相似的类同时存在,为了简化客户端,让客户只关心所获得的对象而不用去关系具体 的创建过程。通过使用工厂类,用户可以通过工厂类的静态方法,使用不同的参数即可创建出具体类,所以简单工厂模式又称为静态方法模式。
将这种相似的类看作是同类商品下的不同具体产品,将该类产品的应该具有的所有方法构造成一个类,其余所有具体产品为该类的子类。创建工厂类,设计一个静态方法根据输入参数的不同,返回不同的子类对象。

工厂方法模式

在简单工厂模式中,一旦需要生产新产品就需要修改工厂类的方法逻辑,违背了对扩展是开放的对修改是封闭的原则。而在工厂方法模式中,加入了抽象工厂和具体工厂的部分,使得每一个具体工厂生产一个具体产品。这样,有效解决了加入新产品的问题,只需要添加新的具体工厂即可。虽然整个过程更加繁琐,但降低了使用方和被使用方的耦合度。
与简单工厂不同的是,抽象工厂提供工厂标准方法,具体工厂继承抽象工厂,并重写父类方法返回自己的产品对象。客户端使用时只需创建不同的具体工厂类。

抽象工厂模式

在工厂方法模式中,每个工厂只能生产一种产品,加大了系统的复杂程度。而抽象工厂模式,可以生产多类产品,每类产品下又有多个具体产品。为了实现这样的设计,加入了抽象产品簇类,为所有产品的共有方法类。抽象产品类继承抽象产品簇类,为一类产品的共有方法类,具体产品类继承抽象产品类。抽象工厂提供不同类产品的生产,每个具体共产负责每种产品类的一种具体产品。

----结构型模式----

代理模式

一般的情况下,客户端会直接访问目标对象,但当由于某种原因需要对客户隐藏目标对象的信息时,就会考虑引入中间人。客户端访问中间人,中间人再访问对象获取信息返回给客服端。在整个交互过程中,客户端和目标对象都不知道对方的信息,却完成了整个交互,这就是代理模式的简单模型。
先创建目标对象的接口,包含客户端所有的服务。使真实对象类和代理对象类同时实现该接口,代理对象类的各方法调用相对应的真实对象类方法。客户端在使用时,只需创建代理对象的实例即可。

适配器模式

客户端调用方法已经写好,而且对象的方法也已经完成,但是两者不相匹配。最简单的情况就是说,客户端所调用的方法名,与对象中所写的方法名不同,但又无法对双方进行更改。这个时候就需要引入一个适配器类,将对象包裹成满足客户端调用的类,这样的思想就是适配器模式。
先将客户端的调用以接口的形式表现,创建适配器类继承源类并实现上述接口。在所重写的接口方法中调用源类方法,这样适配器类就可以按照客户端要求,完成源类的代理功能。

----行为型模式----

观察者模式

当出现一个类中的信息发生改变时,会牵动其他类中的信息随之发生改变的情况,可以使用观察者模式的触发机制。对于被观察的类,设置一个观察类的集合作为成员属性,包含添加观察者和删除观察者,以及通知观察者的函数。其中通知观察者的函数中,遍历观察者集合调用每个观察者的响应函数。对于观察者类来说,可以使用抽象观察者类实现统一的响应函数接口,作为所有观察者类的父类。这样一来,每当被观察者发生通知事件,所有的在册观察者对象都会收到通知,做出各自的反应。

访问者模式

当一类事物中可以依据某种特性划分为多个类别,且对于某个事件的发生,不同类别的会产生不同的反应情况。而且最重要的是,划分的类别是不会更新的,可能会加入新的事件删改旧的事件,这样的情况下就会使用访问者模式。将不同事件抽象为Visitor的父类,包含不同类成员的反应事件的函数。具体事件继承自父类,实现具体的不同类的反应函数。事物本身类中只设有接受事件的方法,以Visitor类为参数,调用各自类别下的响应函数。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值