工厂模式 | 建造者模式 | 适配器模式 | |
---|---|---|---|
解决问题 | 解决获取对象问题 | 使用多个简单的对象一步一步构建成一个复杂的对象 | 主要解决在软件系统中,常常要将一些"现存的对象"放到新的环境中,而新环境要求的接口是现对象不能满足的 |
如何实现 | 让其子类实现工厂接口,返回的也是一个抽象的产品 | 将变与不变分离开 | 继承或依赖(推荐) |
优点 | 1、一个调用者想创建一个对象,只要知道其名称就可以了。 2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。 3、屏蔽产品的具体实现,调用者只关心产品的接口。 | 1、建造者独立,易扩展。 2、便于控制细节风险。 | 1、可以让任何两个没有关联的类一起运行。 2、提高了类的复用。 3、增加了类的透明度。 4、灵活性好。 |
缺点 | 每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖 | 1、产品必须有共同点,范围有限制。 2、如内部变化复杂,会有很多的建造类。 | 1、过多地使用适配器,会让系统非常零乱,不易整体进行把握。比如,明明看到调用的是 A 接口,其实内部被适配成了 B 接口的实现,一个系统如果太多出现这种情况,无异于一场灾难。因此如果不是很有必要,可以不使用适配器,而是直接对系统进行重构。 2.由于 JAVA 至多继承一个类,所以至多只能适配一个适配者类,而且目标类必须是抽象类。 |
举例 | 您需要一辆汽车A,可以直接从工厂里面提出该款汽车,而不用去管这辆汽车是怎么做出来的,以及这个汽车里面的具体实现 | 1、去肯德基,汉堡、可乐、薯条、炸鸡翅等是不变的,而其组合是经常变化的,生成出所谓的"套餐"。 | 有动机地修改一个正常运行的系统的接口,这时应该考虑使用适配器模式。 |
设计模式
最新推荐文章于 2024-04-09 22:14:22 发布