设计模式六大原则
开闭原则:对扩展开放,对修改关闭。即在不修改一个软件实体的基础上去扩展其他功能。
里氏代换原则:在软件系统中,一个可以接受基类对象的地方必然可以接受一个子类对象。
依赖倒转原则:针对于接口编程,依赖于抽象而不依赖于具体。
接口隔离原则:使用多个隔离的接口取代一个统一的接口。降低类与类之间的耦合度。
迪米特法则(最少知道原则):一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。
合成复用原则:在系统中应该尽量多使用组合和聚合关联关系,尽量少使用甚至不使用继承关系
J2ee常见设计模式,总共23种
创建型模式(工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式)
结构型模式(适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式)
行为型模式(策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式)
创建型模式(工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式)
结构型模式(适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式)
行为型模式(策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式)
常见的设计模式应用:
1、简单工厂模式:通过专门定义一个类来负责创建其他类的实例,被创建的实例通常具有共同的父类,角色有工厂类角色和抽象产品角色和具体产品角色;工厂类是本模式的核心,含有一定的商业逻辑和判断逻辑,用来创建产品。抽象产品角色一般是具体产品继承的父类或者实现的接口。工厂类所创建的对象就是此角色的实例,在java中一个具体类实现。
2、单例模式:确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例,应用场景比如配置文件解析器,连接工厂等等。
单例又分为恶汉单例和懒汉单例
恶汉单例是线程安全的,在类创建的同时就已经创建好一个静态对象供系统使用,以后不在改变。
懒汉单例是延时加载的,在加载类时创建实例,如果创建对象时不加sychronized则会导致该对象的访问不是线程安全的。
单例模式可以节约系统资源,对于一些需要频繁创建和销毁的对象单例模式无疑可以提高系统的性能;缺点是单例模式中没有抽象层,因此扩展有很大的困难,滥用单例会带来一些负面的问题。 缺点:由于单例模式中没有抽象层,因此单例类的扩展有很大的困难。滥用单例将带来一些负面问题,如为了节省资源将数据库连接池对象设计为的单例类,可能会导致共享连接池对象的程序过多而出现连接池溢出;如果实例化的对象长时间不被利用,系统会认为是垃圾而被回收,这将导致对象状态的丢失。
3、策略模式:商场促销,面向对象的编程不是类越多越好,类的划分是为了封装,但是分类的基础是抽象,具有相同属性和功能的对象的抽象集合才是类;策略模式定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化不会影响使用算法的客户。电影票的购买,有打折、促销、会员、承认、小孩单价都不同。可以用工厂模式实现,但是由于工厂包括了所有的收费方式,电影院可能经常性的更改打折额度和返利额度,每次维护或者扩展收费方式都要改动这个工厂,以致于代码需要重新编译、部署。策略模式是一种定义一系列算法的方法,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合。
4、单一职责原则:如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受意向不到的破坏。
5、开放封闭原则:是指软件i实体(类、模块、函数)应该可以扩展,但是不可修改。
特征就是对于扩展是开放的,对于更改是封闭的。软件会遇到很多问题,不推到重来的办法就是多扩展、少做修改。
Spring中涉及的设计模式总结
简单工厂:BeanFactory;根据传入一个唯一的标识来获得Bean对象,但是否是在传入参数后创建还是传入参数前创建这个要根据具体情况来定。
实质:由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。
单例模式:Spring依赖注入Bean实例默认是单例的;保证类仅有一个实例,并提供一个访问它的全局访问点。
适配器模式:Springmvc中的适配器HandlerAdatper;
代理模式:AOP底层就是动态代理模式的实现,动态代理在内存中构建的,不需要手动编写代理类;静态代理,需要手工编写代理类,代理类引用被代理对象。
策略模式: