Java设计模式 之入门总结

Java23种设计模式案例代码

参考

最好的软件设计模式详解
Java设计模式
Java常用的几种设计模式
java 常用十种设计模式示例归纳 | 已打包请带走

设计模式六大原则

  • 开放封闭原则:对扩展开放,对修改封闭,意即程序拓展时不要动原有的代码
  • LSP原则:任何基类可以出现的地方,子类一定可以出现
  • 依赖倒置原则:使用接口,依赖于抽象而不是具体
  • 接口隔离原则:为了解耦,使用多个相互隔离的接口
  • 迪米特法则:一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。
  • CRP法则:尽量使用合成/聚合的方式,而不是使用继承。

1、开闭原则(Open Close Principle)
开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。

2、里氏代换原则(Liskov Substitution Principle)
里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。—— From Baidu 百科

3、依赖倒转原则(Dependence Inversion Principle)
这个是开闭原则的基础,具体内容:真对接口编程,依赖于抽象而不依赖于具体。

4、接口隔离原则(Interface Segregation Principle)
这个原则的意思是:使用多个隔离的接口,比使用单个接口要好。还是一个降低类之间的耦合度的意思,从这儿我们看出,其实设计模式就是一个软件的设计思想,从大型软件架构出发,为了升级和维护方便。所以上文中多次出现:降低依赖,降低耦合。

5、迪米特法则(最少知道原则)(Demeter Principle)
为什么叫最少知道原则,就是说:一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。

6、合成复用原则(Composite Reuse Principle)
原则是尽量使用合成/聚合的方式,而不是使用继承。

设计模式分类

1、创建型模式(在创建对象的过程中尽量隐藏创建细节,不直接使用new)

  • 工厂模式(Factory Pattern)
  • 抽象工厂模式(Abstract Factory Pattern)
  • 单例模式(Singleton Pattern)
  • 建造者模式(Builder Pattern)
  • 原型模式(Prototype Pattern)

2、结构型模式(主要关注类和对象的继承、组合)

  • 适配器模式(Adapter Pattern)
  • 桥接模式(Bridge Pattern)
  • 过滤器模式(Filter、Criteria Pattern)
  • 组合模式(Composite Pattern)
  • 装饰器模式(Decorator Pattern)
  • 外观模式(Facade Pattern)
  • 享元模式(Flyweight Pattern)
  • 代理模式(Proxy Pattern)

3、行为型模式(关注对象之间的通信)

  • 责任链模式(Chain of Responsibility Pattern)
  • 命令模式(Command Pattern)
  • 解释器模式(Interpreter Pattern)
  • 迭代器模式(Iterator Pattern)
  • 中介者模式(Mediator Pattern)
  • 备忘录模式(Memento Pattern)
  • 观察者模式(Observer Pattern)
  • 状态模式(State Pattern)
  • 空对象模式(Null Object Pattern)
  • 策略模式(Strategy Pattern)
  • 模板模式(Template Pattern)
  • 访问者模式(Visitor Pattern)

工厂模式

现在要创建一些对象,他们都实现了某个接口或者继承了某个类。我们不在需要的时候使用new操作符,而是把创建的操作让一个“工厂类”完成,我们在需要新对象时只需要把需要的东西的名字以参数形式传递给工厂类就行了,而不用去管怎么创建的。

抽象工厂模式

在工厂模式中,一个工厂类只生产实现某个接口或者继承了某个类的对象,也就是具体工厂生产具体对象,如果建立一个抽象工厂类和若干个具体工厂,每个具体工厂负责产生一类对象,就成了抽象工厂模式。就是一个抽象工厂类可以生产多种类型的对象,具体每种类型的对象怎么生成,要用一个专门的工厂类来决定。

单例模式

一个类,他虽然有构造方法,但是把它设定为private,不能被外界使用。这个类只存在一个实例,保存在这个类自己的一个静态字段里,如果要用这个类的实例属性、实例方法,都通过这个静态字段访问这个唯一的实例来实现。

建造者模式

现在要创建一个很复杂的对象,我们把这个工作分开来做,先定义并实现一个建造者类,在这个类中实现构建这个对象所需要的全部方法。再定义并实现一个导演类,把一个建造者类传给它,让它负责这些方法调用的逻辑次序和对象的组合,然后统一给客户端返回一个生成好的复杂对象。

原型模式

已经有了一个对象了,我们创建对象时直接复制它,不需要新建了。

适配器模式

一个类和另一个类有一些相似的操作,但是它们的形式是不一致的,需要有一个东西把它包裹起来,变成另一种比较合适的形式。

  • 类适配:创建新类,继承源类,并实现新接口,例如
class  adapter extends oldClass  implements newFunc{}
  • 对象适配:创建新类持源类的实例,并实现新接口,例如
class adapter implements newFunc { private oldClass oldInstance ;}
  • 接口适配:创建新的抽象类实现旧接口方法。例如
abstract class adapter implements oldClassFunc { void newFunc();}

装饰器模式

一个类有一些方法,但是我们想让这些方法调用的时候多执行一些东西,于是可以定义一个装饰器的类,它和被修饰的类同时一个类的子类或是一个接口的实现,然后将这个被修饰的类委托给这个装饰器类,如果想使用这个修饰后的方法,只需要调用这个修饰器的方法就可以了。

代理模式

我想访问一个对象,但是这个对象出于多种考虑,比如细节复杂、需要控制访问、隐藏细节等,不能让别人直接使用,必须要使用一个中间层性质的代理类,对这个对象的所有访问都由这个代理类来完成。

外观模式

我现在有一个成套的系统,有若干接口、类,但是直接操作这些类是一个很复杂的过程,于是额外再定义一个总结性质的类,给几个比较有概括性的、简洁的方法去操作这个系统,以此来简化访问。

桥接模式

如果我现在有一个抽象的父类,和一些具体的子类,本来他们应该是一个继承的关系,但我认为这样会使两个类耦合过紧,于是强行使用委派、组合的方式,使两者可以相对独立的变化。具体就是在抽象类中实现一些基本操作,然后把一些需要细分的操作委派出去,可以把那些原来的子类统一到一个接口里,然后把这个接口和原来的父类组合。

组合模式

定义一个比较宽泛的类,一个具体的对象属于这个类,把这些具体的对象按一定方式组合起来也属于这个类。

享元模式

很多对象都需要用同一个对象,但他们都自己创建了一份保存,这样会造成内存大量浪费。把这一部分抽出来,只创建一份,供这些对象共同使用,就可以节省内存。

观察者模式

一组对象依赖于某一个对象,这个对象的状态的更新会影响这一组对象,于是把这组对象称为观察者,放在被观察者一个不定长数组的字段里,两者分别保存对方的引用,被观察者更新时会调用观察者的方法来提醒观察者。

访问者模式

我现在有一个类,上面有一些操作,但是我不想把它写到这个类里,所以我把这个功能单独拿出来,需要执行这个功能的时候,把这个类的引用给那个功能类,让那个功能类操作这个类。

状态模式

一个类,他的一些操作的具体过程是根据它当前的状态来决定的,而这个状态取决于当前环境的上下文。

备忘录模式

对一个类的对象的状态进行可持久化处理,方法是另外设立一个备忘录类,记录状态的变化过程,然后就可以恢复到某个历史状态。

策略模式

对于一个操作,实现它的算法有很多,我把这些算法每个都建立一个类,实现那个方法类的接口,在需要执行这个操作的地方,要运用某个算法,只需要把那个算法对应的类传进去就行了。

模板模式

一个操作,它的每一步可能有细节上的区别,但是它的大概框架是确定的,在执行各个步骤的时候,先用一些抽象类放在对应的位置,等随后再定义一些具体类去填充它。

迭代器模式

一个类,里面有一组元素,要按照某个次序一次访问这些元素,于是单独设立一个迭代器,无需暴露内部复杂实现,直接告诉你当前是哪个元素、下一个是哪个元素,就可以按照这种特定次序遍历这些元素了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值