设计模式

学习主题:设计模式

1.单例模式_应用场景_饿汉式_懒汉式

(1)什么是单例模式?为什么需要单例模式?

单例模式:保证一个类只有一个实例,并且提供一个访问该实 例的全局访问点
单例模式优点:
由于单例模式只生成一个实例,减少了系统性能开销,当一个 对象的产生需要比较多的资源时,如读取配置、产生其他依赖对象 时,则可以通过在 应用启动时直接产生一个单例对象,然后永久驻 留内存的方式来解决
单例模式可以在系统设置全局的访问点,优化环共享资源访问,例如可以设计一个单例类,负责所有数据表的映射处理

(2)饿汉式与懒汉式的区别是什么?

饿汉式(线程安全,调用效率高。 但是,不能延时加载。)
懒汉式(线程安全,调用效率不高。 但是,可以延时加载。)

2.简单工厂模式_面向对象设计原则_开闭原则_依赖反转原则_迪米特法则

(1)说一说简单工厂模式

简单工厂模式也叫静态工厂模式,就是工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的对象实例。对于增加新产品无能为力!不修改代码的话,是无法扩展的。

(2)什么是开闭原则?

OCP(开闭原则,Open-Closed Principle):一个软件的实体应当对扩展开放,对修改关闭。

(3)什么是依赖反转原则?

DIP(依赖倒转原则,Dependence Inversion Principle):要针对接口编程,不要针对实现编程。

(4)什么是迪米特法则?

LoD(迪米特法则,Law of Demeter):只与你直接的朋友通信,而避免和陌生人通信。

3.建造者模式详解_类图关系

(1)什么是建造者模式?类与类之间有什么关系?

分离了对象子组件的单独构造(由Builder来负责)和装配(由Director负责)。 从而可以构造出复杂的对象。这个模式适用于:某个对象的构建过程复杂的情况下使用。
由于实现了构建和装配的解耦。不同的构建器,相同的装配,也可以做出不同的对象;相同的构建器,不同的装配顺序也可以做出不同的对象。也就是实现了构建算法、装配算法的解耦,实现了更好的复用。

4.原型模式_prototype_浅复制_深复制_Clonable接口

(1)什么是原型模式?

通过new产生一个对象需要非常繁琐的数据准备或访问权限,则可以使用原型模式。就是java中的克隆技术,以某个对象为原型,复制出新的对象。显然,新的对象具备原型对象的特点。
优势有:效率高(直接克隆,避免了重新执行构造过程步骤) 。
克隆类似于new,但是不同于new。new创建新的对象属性采用的是默认值。克隆出的对象的属性值完全和原型对象相同。并且克隆出的新对象改变不会影响原型对象。然后,再修改克隆对象的值。

(2)什么是浅复制?什么是深复制?

浅克隆:创建一个新对象,新对象的属性和原来对象完全相同,对于非基本类型属性,仍指向原有属性所指向的对象的内存地址。
深克隆:创建一个新对象,属性中引用的其他对象也会被克隆,不再指向原有对象地址。
总之深浅克隆都会在堆中新分配一块区域,区别在于对象属性引用的对象是否需要进行克隆(递归性的)。

(3)Clonable接口是做什么用的

cloneable其实就是一个标记接口,只有实现这个接口后,然后在类中重写Object中的clone方法,然后通过类调用clone方法才能克隆成功,如果不实现这个接口,则会抛出CloneNotSupportedException(克隆不被支持)异常。

5.适配器模式_对象适配器_类适配器_开发中场景

(1)什么是适配器模式?什么时候用适配器模式?

将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。
工作中的场景
经常用来做旧系统改造和升级,如果我们的系统开发之后再也不需要维护,那么很多模式都是没必要的,但是不幸的是,事实却是维护一个系统的代价往往是开发一个系统的数倍。
我们学习中见过的场景
java.io.InputStreamReader(InputStream)
java.io.OutputStreamWriter(OutputStream)

6.代理模式

(1)什么是代理模式?为什么需要代理模式?代理模式有什么好处

代理模式概念:
代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。
代理模式应用场景:
– 安全代理:屏蔽对真实角色的直接访问。
– 远程代理:通过代理类处理远程方法调用(RMI)
– 延迟加载:先加载轻量级的代理对象,真正需要再加载真实对象。
比如你要开发一个大文档查看软件,大文档中有大的图片,有可能一个图片有100MB,在打开文件时不可能将所有的图片都显示出来,这样就可以使用代理模式,当需要查看图片时,用proxy来进行大图片的打开
代理模式作用:
通过代理,控制对对象的访问!可以详细控制访问某个(某类)对象的方法,在调用这个方法前做前置处理,调用这个方法后做后置处理。(即:AOP的微观实现!)

7.桥接模式_多层继承结构_银行日志管理_银行系统消息管理_人力资源的奖金计算

(1)什么是桥接模式?为什么需要桥接模式?什么业务场景下使用桥接模式

桥接模式概念:
将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模式。

桥接模式作用:
桥接模式可以取代多层继承的方案。 多层继承违背了单一职责原则,复用性较差,类的个数也非常多。桥接模式可以极大的减少子类的个数,从而降低管理和维护的成本。桥接模式极大的提高了系统可扩展性,在两个变化维度中任意扩展一个维度,都不需要修改原有的系统,符合开闭原则。

桥接模式实际开发中应用场景
– JDBC驱动程序
– AWT中的Peer架构
– 银行日志管理:
• 格式分类:操作日志、交易日志、异常日志
• 距离分类:本地记录日志、异地记录日志
– 人力资源系统中的奖金计算模块:
• 奖金分类:个人奖金、团体奖金、激励奖金。
• 部门分类:人事部门、销售部门、研发部门。
– OA系统中的消息处理:
• 业务类型:普通消息、加急消息、特急消息
• 发送消息方式:系统内消息、手机短信、邮件

8.组合模式_树状结构_杀毒软件架构_JUnite底层架构_常见开发场景

(1)什么是组合模式? 什么时候使用组合模式?

组合模式概念:
	又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树	形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,	它创建了对象组的树形结构。

开发中的应用场景:
– 操作系统的资源管理器
– GUI中的容器层次图
– XML文件解析
– OA系统中,组织结构的处理
– Junit单元测试框架
• 底层设计就是典型的组合模式,TestCase(叶子)、TestUnite(容器)、Test接口(抽象)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值