设计模式(个人理解)

设计模式(个人理解)

工厂模式:
应用实例:一个工厂有一条流水线可以生产不同的产品,当客户需要某个产品时,直接告诉工厂产品名称.工厂就会用流水线生产对应的产品.客户不用关心产品时如何生产出来的,只需要关心使用什么样的产品
优点: 1、一个调用者想创建一个对象,只要知道其名称就可以了。 2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。 3、屏蔽产品的具体实现,调用者只关心产品的接口。
缺点:每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。这并不是什么好事。

抽象工厂模式:
应用实例:一个工厂里有多条流水线,每条流水线可以生产不同品类的产品(如:电子类的 汽车类的);当客户想要某类产品下的具体产品时,只需要告诉工厂需要哪个品类下的哪个产品就行了,工厂根据客户提供的类别和产品名称来选择在哪天生产线生产哪个产品
优点:当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。
缺点:产品族扩展非常困难,要增加一个系列的某一产品,既要在抽象的 Creator 里加代码,又要在具体的里面加代码。

单例模式:
应用实例:保证定制的自行车是唯一的.当很多人来骑的时候保证每个人骑的都是那辆定制的自行
骑车模式:
懒汉模式:当第一个人需要骑自行车的时候,才去找人定制这辆自行车.这样很可能出现两个人同时定制了辆自行车
饿汉模式:这辆自行车在一开始就定制好,所以当第一个人来的时候直接骑就行了
优点: 1、在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例(比如管理学院首页页面缓存)。 2、避免对资源的多重占用(比如写文件操作)。
缺点:没有接口,不能继承,与单一职责原则冲突,一个类应该只关心内部逻辑,而不关心外面怎么样来实例化。

建造者模式:
应用实例:平常我们吃的肯德基各种套餐可以看做是一种建造者模式.肯德基里有 可乐 汉堡 薯条.这些都是基本单品.这些基本单品也属于不同的品目,比如说可乐属于冷饮类,同时也可以根据不同品目下的单品组成不同的套餐,比如说 可乐汉堡套餐 薯条汉堡套餐等等
优点: 1、建造者独立,易扩展。 2、便于控制细节风险。
缺点: 1、产品必须有共同点,范围有限制。 2、如内部变化复杂,会有很多的建造类。

原型模式:
应用实例:用ps大费周章的完成一张很漂亮的照片的时候,不用每次使用照片的时候都重新再用ps去完成.而是保存一份,下次用的时候直接复制一份就行了(这里的重点是复制)
优点: 1、性能提高。 2、逃避构造函数的约束。
缺点: 1、配备克隆方法需要对类的功能进行通盘考虑,这对于全新的类不是很难,但对于已有的类不一定很容易,特别当一个类引用不支持串行化的间接对象,或者引用含有循环结构的时候。 2、必须实现 Cloneable 接口。 3、逃避构造函数的约束。

适配器模式:
应用实例:我们平时电脑打开一个文件的时候,系统就会根据文件的类型来适配可以打开它的软件.比如说你要打开word文档的时候 就会适配到office或者wps等可以打开word文档的软件
优点: 1、可以让任何两个没有关联的类一起运行。 2、提高了类的复用。 3、增加了类的透明度。 4、灵活性好。
缺点: 1、过多地使用适配器,会让系统非常零乱,不易整体进行把握。比如,明明看到调用的是 A 接口,其实内部被适配成了 B 接口的实现,一个系统如果太多出现这种情况,无异于一场灾难。因此如果不是很有必要,可以不使用适配器,而是直接对系统进行重构。 2.由于 JAVA 至多继承一个类,所以至多只能适配一个适配者类,而且目标类必须是抽象类。

桥接模式
应用实例:使用画图工具画图,可以画出红色圆也可以画出蓝色的正方形.将图这个抽象的概念与画图工具这个具体的工具联系起来完成画图的工作.
优点: 1、抽象和实现的分离。 2、优秀的扩展能力。 3、实现细节对客户透明。
缺点:桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。

过滤器模式:
应用实例:制定不同的筛选标准去筛选数据

组合模式:
应用实例:公司的领导 经理 组长可以组合成共同的员工类
优点: 1、高层模块调用简单。 2、节点自由增加。
缺点:在使用组合模式时,其叶子和树枝的声明都是实现类,而不是接口,违反了依赖倒置原则。
使用场景:部分、整体场景,如树形菜单,文件、文件夹的管理。

装饰器模式:
应用实例:给一个人穿衣服穿鞋
优点:装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。
缺点:多层装饰比较复杂。

外观模式;
应用实例: 1、去医院看病,可能要去挂号、门诊、划价、取药,让患者或患者家属觉得很复杂,如果有提供接待人员,只让接待人员来处理,就很方便。 2、JAVA 的三层开发模式。
优点: 1、减少系统相互依赖。 2、提高灵活性。 3、提高了安全性。
缺点:不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值