大话设计模式学习
简单工厂模式
目的:为了减少代码耦合度,将对象创建和使用进行分离。
优点: 将对象的创建交给专门的工厂类负责,实现了对象的创建和对象的使用分离,降低代码耦合度。
缺点: 工厂类不够灵活,增加新的具体产品需要修改工厂类的判断逻辑代码,比如都看过X战警吧,里面的魔形女是绿皮肤,上面的工厂类显然满足不了,需要增加一个 if 判断分支才能支持。而且当产品类型较多时,简单工厂的 if 判断将会非常多,不容易维护.
策略模式
目的:针对简单工厂模式的增加新具体产品就需要修改工厂类的缺点,提出策略模式。
优点:其思想就是创建一个抽象的功能父类,以后增加别的功能,只用增加对应具体功能的类,然后用反射去调用新加载的类不用在修改工厂类。
单一职责原则
目的:提高代码的复用性,减少代码之间的耦合度。使一个类只要一个引起它变化的原因。
开放-封闭原则
目的:当软件的功能需求发生变化时,代码应该具有稳定性,不能推导重写,即软件应该具有扩展性,但是不能修改。
实现主要过程:对一些可能会发生变化的功能就要写抽象父类,后期容易拓展新的功能。
依赖倒转原则
目的:使代码之间应该具有高内聚,低耦合的特点,高层模块不应该依赖底层模块,应该都依赖抽象模块。抽象模块不应该依赖细节,应该是细节依赖抽象模块(不要写成针对具体的细节,比如加减乘除,应该写成抽象的父类接口,提高代码复用性,满足里氏代换原则(子类必须能够替换他们的父类新))。
装饰模式
目的:动态的地给一个对象添加一些额外的职能,就增加功能来说,装饰模式比生成子类更为灵活。
把类中的装饰功能从类中搬移去除,简化原有的类。其思想就是Decorator装饰者抽象类继承Component抽象类。定义Component抽象类的实体对象ConcreteComponent,定义抽象类Decorator的实体对象DecoratorA,DecoratorB。ConcreteComponent,DecoratorA,DecoratorB都是Component的实现类或者子类实现类,用DecoratorA装饰ConcreteComponent,然后用DecoratorB装饰DecoratorA。以达到对ConcreteComponent层层装饰的目的。
代理模式
目的:为其他对象提供一种代理以控制对这个对象的访问。
应用:
远程代理:为一个对象在不同地址空间提供局部代表,
虚拟代理:根据需要创建开销很大的对象,通过它存放实例化需要很长时间的对象。比如网页中图片的加载,先是代理对象替代真实图片,然后图片进行下载。
安全代理:用来控制真实对象访问时权限,应用于对象应该有不同访问权限的时候
后图片进行下载。
安全代理:用来控制真实对象访问时权限,应用于对象应该有不同访问权限的时候
智能指引,调用真实的对象时,代理处理另一些事。