Skip to content

YingDG/MyDesignPatternExercise

Repository files navigation

MyDesignPatternExercise

Java设计模式练习

设计模式原则(SOLID原则):

1.单一职责原则:一个类只负责一项职责(但界限非常模糊,视业务情况而定)

2.里氏替换原则:任何基类可以出现的地方,子类一定能够出现(类可扩展性)

3.依赖倒置原则:接口编程,依赖于抽象而不依赖于具体(描述先于实现)

4.接口隔离原则:优先使用多个隔离接口,而不是使用单个接口(函数式编程)

5.迪米特原则:单个实体尽量与其他实体少发生相互作用(功能模块相对独立)

6.开闭原则:类、模块、函数对扩展开放,对修改关闭(通俗地说:艹,谁改老子的代码@%¥%&*%¥%¥。。。你懂的)

设计模式种类:

一、创建型:

1.单例模式Singleton
  单例类只能有一个实例;
  单例类必须自己创建自己的唯一实例;
  单例类必须给所有其他对象提供这一实例

2.工厂模式Factory 
    出现大量用例需要创建,且具有共同接口时使用(类的创建依赖工厂类)

3.抽象工厂模式AbstractFactory
    创建多个工厂类继承抽象工厂类,
    需要增加新的功能时,直接增加新的工厂子类,不需要修改之前的代码(保证代码可扩展性并遵守开闭原则)

4.建造者模式Builder
    将各种业务类集中起来进行管理,用来创建复合对象,使其具有不同的属性

5.原型模式Prototype
    以某个对象为原型进行复制、克隆,产生一个和原对象类似的新对象(注意深克隆与浅克隆)

以上五种设计模式现在完全可以由Spring框架初始化实现。

二、行为型:

6.模板方法模式TemplateMethod(父、子类)
    抽象类中,定义一个主方法,再定义1...n个子方法,可以是抽象或实现方法,
    子类继承该抽象类,重写或调用抽象类方法,实现对子类的调用

7.中介者模式Mediator(中间类)
    降低类类之间的耦合,具体类之间的关系及其方法调用由中介类负责

8.观察者模式Observer(两类之间)
    类变化时,其它依赖该类的类都会随着变化

9.访问者模式Visitor(中间类)
    分离对象数据结构与行为,适用于数据结构相对稳定算法又易变化的系统

10.命令模式Command(两类之间)
    调用方,传递方,执行方三者解耦,请求与执行分开(典型:MVC设计模式)

11.责任链模式ChainOfResponsibility(两类之间)
    多个对象中每个对象持有对下一个对象的引用并形成链式引用,请求链上传递到某个类决定处理为止,
    可以实现在客户端未知的情况下动态调整系统

12.策略模式Strategy(父、子类)
    设计接口类统一实现,定义、封装一系列算法,且可以相互替换,不影响到调用

13.迭代器模式Iterator(两类之间)
    使用迭代器对象顺序访问聚集合中的对象

14.解释器模式Interpreter(中间类)
    主要用于开发OOP编译器

15.备忘录模式Memento(类状态)
    保存对象的某个状态,以便在适当的时候恢复对象

16.状态模式State(类状态)
    对象状态改变时同时改变其实现(典型:权限控制)

三、结构型:

17.适配器模式Adapter
    将类的接口转换成另一种接口,消除接口不匹配所造成的类的兼容性问题。
    主要分为:类的适配器模式(主要)、对象的适配器模式、接口的适配器模式

18.桥接模式Bridge
    将抽象化与实现化解耦,使得二者可以独立变化(典型:JDBC )

19.组合模式Composite
    用于处理类似树形结构的问题

20.装饰模式Decorator
    给一个对象动态增加新功能,
    要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例
    应用场景:扩展类功能;动态增加、撤销对象功能

21.外观模式Facade
    将类和类之间的关系配置到一个Facade类中,降低了类之间的耦合度

22.享元模式Flyweight
    实现对象共享池,以减少内存的开销,通常与工厂模式配合使用(典型:JDBC连接池)

23.代理模式Proxy
    创建一个代理类替原对象进行或扩展一些操作(满足开闭原则)

参考:http://www.cnblogs.com/maowang1991/archive/2013/04/15/3023236.html

About

我的Java设计模式练习

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages