学习笔记 --设计模式 part 1

本文详细介绍了设计模式中的工厂模式和抽象工厂模式,包括它们的定义、图例、代码示例及各自的好处。工厂模式通过解耦创建过程,减少依赖,实现了延迟实例化;抽象工厂模式进一步解耦了创建系列相关对象的过程,适用于创建有内在关联的产品集合。此外,还对比了抽象工厂、工厂和简单工厂的区别与应用场景。
摘要由CSDN通过智能技术生成

前言

之前看了headfirst和设计模式,总结了一下自己的理解,现记录下来以备后面查阅

设计模式列举

分类的标准为:

Created with Raphaël 2.2.0 开始 创建新对象? 创建型 结束 组装交互? 结构型 行动规则? 行为型 yes no yes no yes no
类型名称
创建型工厂、抽象工厂、生成器、原型
组合型适配器、桥接、组合、外观、装饰、代理、享元
行为型职责链、命令、迭代器、中介者、解析器、观察者、状态、备忘录、模板方法、访问者、策略

工厂模式

定义

由子类定义实例化哪个类

图例

在这里插入图片描述

代码示例

伪代码

// 要生成d
// 没用工厂
if(env=='a')
{
A a=new A();
B b=new B();
return new D(a,b);
}else{
C c=new C();
return new D(c);
}
//用了工厂
Creator fa=new FA();
Creator fb=new FB();
if(env=='a'){
return fa.make();
}else{
return fb.make();
}
//用了简单工厂
SF sf=new SF();
return sf.make(env);

好处

1 使用与创建解耦

使用者不需要知道怎么创建,只要找工厂生产就好了。

以前:我要用A->我要new A->A构建依赖B C D->我要import B C D并new B C D。
用了工厂模式:我要用A->找A工厂做一个

2 减少依赖,增加复用

同1,既然不关心创建,那么构建A的B C D我也可以不用依赖,创建的代码也封装到了工厂里面。

3 延迟决定实例化对象的时点

当要用的时候才进行实例化对象,将决定的时点从编码时期后移到运行时,那么就可以使用动态配置来决定实例化的对象类型或者参数。

抽象工厂

定义

提供一个接口创建一系列相关的对象,而不需要具体类

图例

在这里插入图片描述

代码示例

伪代码

//要d,e
//没用抽象工厂
D d;
E e;
if(f instanceof creatorD){
d=(creatorD)f.makeD();
}
if(f instanceof creatorE){
e=(creatorE)f.makeE();
}
//抽象工厂
AbstractFactory f=new FA();
D d=f.makeD();
d.e=f.makeE();

好处

1 创建方法定义与实现进一步解耦

2 动态化创建方法

3 聚合多个创建接口,适合创建有关联的产品

坏处

1 增加创建对象时,代价会增大

以前:CreatorA增加makeA1->改实现CreatorA的工厂
现在:CreatorA增加makeA1->改实现CreatorA的工厂+实现AbstractFactory的工厂

对比

抽象工厂VS工厂VS简单工厂

抽象工厂

适合创建多个有关联的产品,并且隔离不同工厂的产品

FA extends abstactFactory->生产(钢笔,墨水)
FB extends abstactFactory->生产(圆珠笔,笔芯)
怎么做都不会生产出(钢笔,笔芯)但是如果把这四样东西分成四个工厂,那么就有可能组合生产出(钢笔,笔芯)这样的错误搭配

工厂

适合生产一类产品,彼此之间有共通功能但不相关

如FA生产钢笔,FB生产铅笔,两者都能写字

简单工厂

实际上就是把创建的代码抽出封装到工厂,相比工厂和抽象工厂抽象度低,没有多态,只是形态像工厂
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值