JAVA OOAD 设计模式--创建型设计模式

模式包含的要素
1.模式名称
2、该模式所能解决的问题
3、解决方案
4、使用该模式后的效果(优点和缺点)
模式
避免重复问题而提出来的解决方案
类型
架构模式
软件加构上的,整体考虑而提出来的一些解决方案,比如:B/S,C/S,MVC,ORM,事务脚本,领域模型……从宏观的角度来说
设计模式
是从微观的角度上来看软件开发过程中,碰到的一些重复业务场景并提出的解决方案。
设计模式分类
创建型设计模式
更多的关注对象如何创建,而提出来的各种创建方案
结构型设计模式,
更多的关注于类和类,对象和对象的整体结构而提出来的各种解决方案
行为型设计模式
更多的关注与实例之间的行为互调,以及职责分配的问题
分类
创建型模式
结构式模式
行为型模式
重点掌握:
代理模式
单例模式
简单工厂模式:将产品的生产,从调用类中提取到工厂类中来,工厂的职责就是产生客户想要的产品。如果后续需要拓展新的产品。我们只需要修改工厂类(违背开闭原则。其实可以借助反射来解决)
又称之为静态工厂方法模式,该模式会专门定义一个工厂类,然后再工厂类中提供一个静态方法,由该静态方法根据用户的输入,动态决定创建什么类型的对象,通常来说工厂类都有一个特点就是具备相同的父类,或者具备相同的接口
简单工厂的三种角色:
产品的抽象类(或接口):对具体产品进行类的抽象或行为的抽象
具体的产品:工厂类产生的实例
工厂类:主要负责根据用户的输入,动态的产生具体的产品
作用:将客户调用类上的职责分离,每一个客户调用类身上至少具备两个职责(创建对象的职责,调用对象的行为的职责),进行职责分离,让调用类最终只存在一个职责(调用对象的行为的职责),而将创建对象的职责委托给工厂类
缺点:
简单工厂,实际上将对象的产生,由之前的客户调用类身上,强制性的定义在工厂类身上,工厂类此时具备了一定的创建对象的业务逻辑,以及一些判断逻辑。那么如果具体的产品,需要发生变化,或者是有新的产品需要拓展,那么毫无疑问,此时就需要去针对工厂类做相应的变化,那么无形中就违背了“开闭原则”,“单一原则”,“接口依赖倒转原则”
注:简单工厂模式,只能产生同一家族(继承相同类,实现相同接口)的产品,非统一家族的产品,简单工厂是无法使用的
工厂方法模式:(简单工厂模式,会出现一些问题,比如:调用类和工厂类直接耦合,工厂类中无法满足“开闭原则”,因为工厂类中方法存在一定的业务逻辑和判断逻辑,如果需要新增新的产品,工厂类也需要去做相应的修改,所以违背了“开闭原则”)为了规避上述问题,所以才有了抽象工厂方法模式,实际上就是在工厂类的基础上,进一步进行工厂抽象,然后每一个独立的产品都对应一个具体的产品工厂,通过这种方式来实现程序满足“开闭原则”在调用类中使用面向接口编程,来解决上述的调用类和工厂泪直接耦合的问题
四种角色
1.工厂的抽象类 完成对产品生产工厂进行抽象
2.具体产品的生产工厂,分别对产品进行生产
3.产品的抽象类|接口:对具体产品进行类的抽象或者行为的抽象
4.具体的产品:工厂类产生的具体实例
原型模式
克隆模式
需要大量的产生具有相同属性|类似属性的多个对象时使用。通过克隆接口来实现,以参照物来进行克隆,大量产生新的对象
克隆的好处,就是减少大量属性赋值的问题
JAVA中原型模式实现方式非常简单,实现Cloneable接口,并重写clone( )就可以完成对象的“浅克隆”,如果对象的关联对象也需要克隆,那么就需要关联对象也要实现Cloneable接口,并重写Clone( ),并且对象克隆时,还要通知关联对象去克隆,从而做到“深度克隆”,
单例模式
如果碰到某种业务场景,如果一个类在整个范围内,都只需要拥有一个实例的时候,我们就可以使用单例模式
实现方式:
懒汉式
饿汉式
观察者模式
定义了一种一对多的依赖关系,让多个观察者对象同时监听同一个主题,当主题的状态发生变化的时候,可以让这些多个观察者自动刷新他们自己。当然这个过程,是由主题来通知观察者来发生变化
适配器模式
当两个类,或者说两个组件需要相互通讯的时候,然后两个类又无法直接交互的情况下,比如说:美国教练无法直接指挥外籍球员时,此时就需要一个适配器来进行中间协助翻译

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值