java 设计模式(一)-- 概述

一、OO基本概念:抽象、封装、继承、多态

  1. 封装的目的是隐藏事务内部的实现细节,以便提高安全性和简化编程。封装提供了合理的边界, 避免外部调用者接触到内部的细节。我们在日常开发中,因为无意间暴露了细节导致的难缠 bug 太多了,比如在多线程环境暴露内部状态,导致的并发修改问题。从另外一个角度看,封 装这种隐藏,也提供了简化的界面,避免太多无意义的细节浪费调用者的精力。
  2. 继承是代码复用的基础机制,类似于我们对于马、白马、黑马的归纳总结。但要注意,继承可以 看作是非常紧耦合的一种关系,父类代码修改,子类行为也会变动。在实践中,过度滥用继承, 可能会起到反效果。
  3. 多态. 你可能立即会想到重写(override)和重载(overload)、向上转型。
    简单说,重写是 父子类中相同名字和参数的方法,不同的实现;
    重载则是相同名字的方法,但是不同的参数,本 质上这些方法签名是不一样
public int doSomething() { 
    return 0; 
} 
// 输入参数不同,意味着方法签名不同,重载的体现 
public int doSomething(List<String> strs) {
     return 0; 
} 
// return 类型不一样,编译不能通过 
public short doSomething() {
     return 0; 
} 

二、 良好的OO设计必须具备 可复用、可扩充、可维护 三个特性

三、OO原则:

  1. 找出应用中可能需要变化之处, 把它们独立出来,不要和那些不 需要变化的代码混在一起
  2. 针对接口编程,而不是针对实现 编程。
  3. 多用组合,少用继承。
  4. 为交互对象之间的松耦合设 计而努力
  5. 类应该对扩展开放,对修改关闭。

四、 S.O.L.I.D 原则:

  • 单一职责(Single Responsibility),类或者对象好是只有单一职责,在程序设计中如果发现某个类承担着多种义务,可以考虑进行拆分。
  • 开关原则(Open-Close, Open for extension, close for modification),设计要对扩展开放,对修改关闭。换句话说,程序设计应保证平滑的扩展性,尽量避免因为新增同类功能而修改已有实现,这样可以少产出些回归(regression)问题。
  • 里氏替换(Liskov Substitution),这是面向对象的基本要素之一,进行继承关系抽象时,凡是可以用父类或者基类的地方,都可以用子类替换
  • 接口分离(Interface Segregation),我们在进行类和接口设计时,如果在一个接口里定义了太多方法,其子类很可能面临两难,就是只有部分方法对它是有意义的,这就破坏了程序 的内聚性。
    对于这种情况,可以通过拆分成功能单一的多个接口,将行为进行解耦。在未来维护中,如 果某个接口设计有变,不会对使用其他接口的子类构成影响。
  • 依赖反转(Dependency Inversion),实体应该依赖于抽象而不是实现。也就是说高层次模块,不应该依赖于低层次模块,而是应该基于抽象。实践这一原则是保证产品代码之间适当 耦合度的法宝

五、设计模式分类

大致按照模式的应用目标分类,设计模式可以分为创建型模式、结构型模式和行为型模式。

  1. 创建型模式,是对对象创建过程的各种问题和解决方案的总结,包括各种工厂模式 (Factory、Abstract Factory)、单例模式(Singleton)、构建器模式(Builder)、原型模式(ProtoType)。

  2. 结构型模式,是针对软件设计结构的总结,关注于类、对象继承、组合方式的实践经验。常见的结构型模式,包括桥接模式(Bridge)、适配器模式(Adapter)、装饰者模式(Decorator)、代理模式(Proxy)、组合模式(Composite)、外观模式(Facade)、 享元模式(Flyweight)等。

  3. 行为型模式,是从类或对象之间交互、职责划分等角度总结的模式。比较常见的行为型模式 有策略模式(Strategy)、解释器模式(Interpreter)、命令模式(Command)、观察者模式(Observer)、迭代器模式(Iterator)、模板方法模式(Template Method)、访问者模式(Visitor)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值