对比简单工厂,工厂方法,抽象工厂模式
比较安全组合模式和透明组合模式
安全组合模式容器节点有管理子部件的方法,而叶子节点没有,防止在用户在叶子节点上调用不适当的方法,保证了的安全性,防止叶子节点暴露方法,缺点有可能在区分叶子对象和容器对象会需要进一步判断。
透明组合模式容器节点和叶子节点都有一致的方法,客户端可以一致的去对待和处理,叶对象可能会实现一些对它本身无意义的方法。
比较状态模式和策略模式
目的:状态模式主要用于对象的行为依赖于他的状态
策略模式用于一系列封装好的算法或者策略,互相替换
触发条件:
状态模式是由对象的内部的状态模式改变触发的
策略模式是由客户端代码主动的去选择不同的策略来触发的
使用场景:
状态模式可以对应多个状态
策略模式无论使用什么策略最后的目的都是相同的,具有一致性。
什么是设计模式,设计模式的基本要素
定义:设计模式是一套被反复使用被多数人知晓的经过分类编目的,代码设计经验的总结。
基本要素:模式名称,问题,目的,解决方案,效果实例代码,和相关设计模式。
三种类型模式
创建型注重对象的创建过程
结构型更加关注类与对象的组织
行为型更加关注对象之间的交互
单例模式的优缺点
单例模式在内存中只有一个实例,减少了内存的开支,特别是一个对象需要频繁的创建和销毁时,单例模式的优点就特别明显。
单例模式可以避免对资源的多重占用
单例模式设置了全局唯一的全局访问点优化共享资源访问。
缺点:
扩展困难
单列类的职责过重
由于自动垃圾回收机制,可能会导致共享的单例对象状态丢失
继承
优点:
代码共享、减少创建类的工作量,每个子类拥有父类的方法和属性;
提高代码复用;
子类可以形似父类,但又异于父类;
提高代码可扩展性,很多开源框架的扩展接口都是通过继承父类完成;
提高产品或者项目的开放性
继承缺点(鸡蛋挑骨头):
继承是侵入式的;
降低代码的灵活性。子类必须拥有父类的属性和方法,让子类多了些约束。
增强了耦合性。当父类的常量、变量和方法被修改时,需要考虑子类的修改。
透明装饰模式和半透明装饰模式
要求客户端完全针对抽象编程,装饰模式的透明性要求客户端程序不应该将对象声明为具体构件类型或具体装饰类型,而应该全部声明为抽象构件类型
对于客户端而言,具体构件对象和具体装饰对象没有任何区别
可以让客户端透明地使用装饰之前的对象和装饰之后的对象,无须关心它们的区别。可以对一个已装饰过的对象进行多次装饰,得到更为复杂、功能更为强大的对象
半透明(Semi-transparent)装饰模式:用具体装饰类型来定义装饰之后的对象,而具体构件使用抽象构件类型来定义
对于客户端而言,具体构件类型无须关心,是透明的;但是具体装饰类型必须指定,这是不透明的
可以给系统带来更多的灵活性,设计相对简单,使用起来也非常方便
客户端使用具体装饰类型来定义装饰后的对象,因此可以单独调用函数
最大的缺点在于不能实现对同一个对象的多次装饰,而且客户端需要有区别地对待装饰之前的对象和装饰之后的对象
代理的几种模式
保护代理(Protect Proxy):控制对一个对象的访问,可以给不同的用户提供不同级别的使用权限
虚拟代理(Virtual Proxy):如果需要创建一个资源消耗较大的对象,先创建一个消耗相对较小的对象来表示,真实对象只在需要时才会被真正创建
2024年考的是
七大原则,5个结构型设计模式,产品等级结构和产品族的区别,工厂方法的定义