几种常见设计模式区别与优缺点

按照GoF上面写的设计模式分为三大类:

1. 创建型模式

(1) 工厂模型: 大概可以分为3种。

a) 简单工厂模式

通过给创建方法传入参数,决定具体创建哪一个类。

优点: 只有一个工厂类,结构简

缺点: 不完全符合OCP开放封闭原则(扩展应开放,修改应封闭),要增加一个新的产品类,必须相应修改工厂类的方法。

b) 工厂方法模式

优点: 可扩展性好,不用修改原始工厂类,增加一个工厂子类即可

缺点: 相比简单工厂模式,每增加一个产品子类,需要增加了一个工厂子类

c) 抽象工厂模式

基于工厂方法模式,适合于解决了一系列相互依赖的对象的创建过程, 将一组对象的创建封装到一个工厂类,

维护这个工厂类比维护多个对象的创建要简单。


(2). 单例(Singleton)模式

只允许产生一个实例。构造函数必须申明为protected/private,不能实例化。


(3). 建造者(Builder)模式

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。



2. 结构型模式

(1). 桥接模式(Bridge)

优点: 通过组合的方式(代替继承方式)将抽象与实现分离,降低了耦合性。

缺点:桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。


可以参考:http://blog.csdn.net/hguisu/article/details/7529194


(2). 适配器模式(Adapter)

用于以下情形:
(
i)提供的接口与使用环境要求不一致;
(ii
)客户端和接口双方都不容易修改;

两种实现方式:

(a).公共继承自Target,私有继承自Adaptee;(接口继承和实现继承)


(b).通过继承自Target,构造时传入Adaptee;(接口继承和组合)



(3). 装饰模式(Decorator)

给一类对象添加一些新的职责,优点:
(i).避免修改父类(增加接口),而且增加的接口其他子类也许并不需要。
(II).不论增加多少个Component子类,
需要一个Decorator类,可以对其所有进行修饰。



(3). 代理模式(Proxy)


解析:(1).抽象基类Subject,定义了ConcreteSubject和Proxy的公有接口,这样就可以在任何需要使用ConcreteSubject的地方使用Proxy。

(2)Proxy其实是基于这样一种时常使用到的技术:某个对象直到它真正被使用到的时候才被初始化,在没有使用到的时候就暂时用Proxy作一个占位符。

代理模式VS 装饰者
相同:它们都提供间接访问对象层,都保存被调用对象的引用,即通过组合的方式来为对象提供更多操作。
不同:代理模式:为另一个对象提供一个替身或占位符以控制对这个对象的访问,简而言之就是用一个对象来代表另一个对象。
装饰者:动态地给一个对象添加一些额外的职责,就增加功能来说,Decorator模式比生成子类更为灵活,它避免了类爆炸问题。


3.行为性模式

(1). 观察者模式


也称发布-订阅模式。它是一些大型系统开发过程要用到的模式之一,比如MVC模型的,MFC、Structs。

使用于当一个对象状态发生改变,与其关联的多个对象得到通知,并做相应处理。

过程:在创建观察者对象时将目标(Subject)指针传入,在观察者(Observer)构造函数中将this注册到Subject对象,用一个容器保存起来。

Subject的某个属性状态发生改变时,并广播通知(Notify)各个观察者,调用观察者的Update操作。

改变状态、广播通知两个操作可以任意由Subject或Observer对象来调用,因为双方结构里都保存了对方的指针。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值