《大话设计模式》要点笔记

原则:

面向对象编程<=>面向接口编程:

细节依赖抽象而非抽象依赖细节,面向接口而非实现编程。例如,面向过程编程时,将常用函数写成程序库,高层模块利用这些数据库。但当新的需求与以往需求高层业务逻辑相似、只想改变数据库或存储方式时,由于高层模块与低层数据库捆绑,无法复用这些高层模块。

面向对象三大特性:封装、继承、多态。

面向对象的好处:可维护、可拓展、可复用、灵活性好。

应猜测最可能出现的变化种类,并通过抽象来隔离这些变化;但刻意抽象所有功能不可取。

单一职责:一个类只能由一个动机引起变化。

里氏代换原则:子类型必须能替换掉它们的父类。正因此,才能在软件不受影响的基础上拓展新功能。

迪米特法则:如果两个类没有相互作用的必要,它们就不要直接交互。如果其中一个类需要调用另一个类的方法,使用第三个类。

模式:

简单工厂模式:由Factory类进行实例化。

工厂模式:由Factory类的子类进行实例化,子类的同名方法只需要return一个相应的类的对象;将选择的任务交给了客户端。

工厂模式的好处:实例化多个对象时,易于更改。

//简单工厂
Operation* operation1 = new Factory.CreateOperation('+');//when the type of calculation
Operation* operation2 = new Factory.CreateOperation('+');//needs changing, there are
Operation* operation3 = new Factory.CreateOperation('+');//3 changes

//工厂
Factory* factory = new AddFactory();//when the type of calculation needs changing, just change it here
Operation* operation1 = factory.CreateOperation();
Operation* operation2 = factory.CreateOperation();
Operation* operation3 = factory.CreateOperation();

策略模式:一系列算法功能相同,只是实现不同。

策略模式的好处:由于传入的参数的类型不同,Context类“选择”了应该实例化哪一个子类(Context的方法只需要调用父类的同名方法),因此就通过继承、多态避免了冗长的条件语句;每个算法都有自己的类、自己的接口,某一个算法的改变不会影响其他算法,因此单元测试更容易;它用相同方法调用所有算法,让使用者知道一个类(Context),从而隐藏了具体实现方法、降低了耦合性。

装饰模式:子类的方法中调用父类的同名方法。

装饰模式的好处:装饰功能在单独一个类中,将其与核心功能分开。

代理模式:Proxy类和RealSubject类实现完全相同的接口,Proxy类的方法只是调用了RealSubject类的同名方法。

代理模式的应用:

1.远程代理。为一个对象在不同地址空间提供局部代理。例如:.Net中的WebService

2.虚拟代理。通过它来存放实例化需要很长时间的对象。例如:打开网页时比图片先出现的图片框

3.安全代理。来控制真实对象访问时的权限。

4.智能指引。调用真实对象时,代理处理另外一些事情。例如:第一次访问某持久对象时将它放入内存;访问某个对象前检查是否已经锁定它。

原型模式:当需要创建多个参数相同的实例时,只需要创建一个,其他的调用clone()即可。clone():创建当前对象的浅表副本。方法创建一个新对象,然后将当前对象的非静态字段复制到该新对象。若当前对象是值类型,则逐位复制;若为引用或指针,则复制引用或指针而不复制对象。

外观模式:为一个层/多个类编写一个接口。使这些层/类的调用者不必了解复杂的实现细节、不会被更改影响。

建造者模式:用一个方法调用一系列方法,由一个指挥者类选择应该调用哪个建造者。通常这一系列方法会一起被调用。

 

(持续更新……)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值