建立网站加强家园沟通和联系的做法有何利弊,wordpress怎么屏蔽国外IP,看世界杯网址,做一个静态网站导航要多少钱一、设计模式
介绍
种一棵树最好的时间是十年前#xff0c;其次是现在 《援助的死亡》-- 比萨莫约 The best time to plant a tree was 10 years ago。 The second best time is now。 《dead aid》-- Dambisa Moyo
1、创建型模式
1.1、单例模式 确保一个类最多只有一个实…一、设计模式
介绍
种一棵树最好的时间是十年前其次是现在 《援助的死亡》-- 比萨·莫约 The best time to plant a tree was 10 years ago。 The second best time is now。 《dead aid》-- Dambisa Moyo
1、创建型模式
1.1、单例模式 确保一个类最多只有一个实例并提供一个全局访问点可以分为预加载和懒加载。
1.2、原型模式 通过复制现有的实例来创建新的实例无需知道相应类的信息。其实就相当于在使用的时候刚好有这么一个对象但是不能直接用clone一个一模一样的对象出来基本上就是原型模式。 深拷贝将一个对象复制以后基本数据类型会被重新创建而引用类型指向的还是原来对象指向的应用。 浅拷贝将一个对象复制后不论是基本数据类型还有引用类型都是重新创建的。简单来说就是深拷贝进行了完全彻底的复制而浅拷贝不彻底。Java中clone如果是基本类型则属于深拷贝如果包含了引用类型则属于浅拷贝。
1.3、建造者模式 将一个复杂对象的构造与它的表示分离使得同样的创建可以有不同的表示。
1.4、简单工厂模式
1.5、工厂方法模式
1.6、抽象工厂模式
2、行为型模式
2.1、策略模式
避免出现if-else、switch;
2.2、责任链模式
俗称踢皮球。 把某一个请求放到某一个链式请求当中。请求的是会把链中的每一个对象都执行一遍。 审批流程。可以将请求和处理进行解耦请求处理者也就是节点对象只需要关系自己内部处理的逻辑即可 不感兴趣的内容可以继续转给下一个节点对象来处理。链式结构比较灵活可以动态的添加或者删除节点易于拓展符合开闭原则。 使用的是要注意出现死循环的情况出现链太长的化可能影响程序执行的效率。
2.3、命令模式
在项目开发的时候不会很常见。
2.4、观察者模式
观察者模式又称为发布订阅模式。
2.5、模板方法模式
定义算法的骨架一次性实现算法中不变的部分并将可变的部分交给子类来实现各个子类中公共的行为被提取出来并集中到一个公共的父类中从而避免了代码的重复。 模板方法中有一部分能力是开放给子类的整体的方法步骤父类已经制定好了。模板方法一般通过继承实现如果父类需要改的化子类也需要改一遍父类的稳定很重要。
2.6、委派模式
委托书、老板和员工、老板下达任务给员工员工完成以后将结果给老板。 双亲委派模型、BeanDefinition、DispatcherServlet。 委派模式属于行为性模式代理模式属于结构型模式。 委派模式注重的结果属于一种特殊的静态代理全权代理。 委派模式注重的任务派遣注重结果。 代理模式注重的是代码的增强注重过程。
2.7、迭代器模式
迭代器模式又称为游标模式提供一种顺序访问元素或者集合中元素的方法而无需暴露集合内部表示抽离集合对象的迭代行为到迭代器中提供一致访问接口。 访问一个集合对象的内容而无需暴露它的内部表示为遍历不通的集合结构提供一个统一的访问接口。 将集合中的迭代功能抽离出去集合不用关心具体的迭代方法。 简单结构不用迭代复杂结构使用迭代器 Map、List。日常开发中用的比较少。
3、结构型模式
3.1、代理模式
代理模式分为静态代理、动态代理(JDK动态代理、Cglib动态代理)。 两者的区别Cglib采用的是继承的方式采用覆盖父类的方法JDK采用的是实现一个接口。 两者的目的是一样的都是通过生成字节码重组成新的类。 JDK对用户来说更加复杂目标类必须实现一个接口Cglib对目标类没有任何要求。效率更高底层没用用到反射。 JDK生成逻辑较为简单、执行效率低。Cglib有个坑即为目标代理类不能有final修饰的方法是不能被代理的。 SpringAop(面向切面编程)则使用的是动态代理。一个切面就相当于一个动态代理。
3.2、门面模式
简单来说门面模式就是代理模式只不过是静态代理。属于一种特殊的静态代理。门面模式的重点是在于封装静态代理的重点在于增强不增强的静态代理即为门面模式。 门面模式和单例模式很多时候会把门面模式做成单例模式。 门面模式的优点简化了调用的过程、建设系统的依赖、更好的划分访问的层次、符合迪米特法则最少知道原则。 门面模式不符合开闭原则因为在封装内部逻辑发生变化的时候门面需要改变。 门面模式可能会破坏单一职责原则即所谓的万能类会增加后期的维护成本。
3.3、装饰器模式
比继承更加具有扩展性更加灵活把扩展放到运行的时候可以透明的并且动态的扩展一个类功能。可以方便的时候在运行的时候进行扩展、撤销。 装饰器模式像一种特殊的静态代理装饰模式强调的是自身功能的拓展是可以动态定制的拓展用户自己说了算是一种透明的拓展。 代理模式强掉的是增强对用户不透明用户没有多少自主权。 装饰器模式是继承的有利补充装饰器模式完全遵守开闭原则装饰器模式的代码较多会增加系统的复杂性动态装饰的时候代码也更加复杂了。
3.4、享元模式
资源可以重复利用避免系统中大量相似的对象创建避免反复创建对象。享元模式大部分情况下都和工厂模式配合使用。共享数据库链接。 享元模式是一种池化技术把经常使用的对象提前缓存起来。JDBC链接池内部采用享元模式减少创建链接时候的耗时。 将现用的资源重复利用起来轻量级的模式是一种线程池的模式。内部状态不变的状态外部状态变化的状态 享元模式经常用到系统底层的开发以便解决系统的性能问题系统中有大量的相似对象、需要缓冲池的场景。 内部状态不变的内容 外部状态变化的内容
3.5、组合模式
组合和聚合不同组合中每个部件的生命周期是一样的同生共死聚合则不然聚合可以随意拆解。组合模式也称为整体部分模式。 尽量使用组合不要用继承。心在一起叫团队人在一起叫团伙。
3.6、适配器模式
适配器模式也叫变压器模式适配器模式用来解决兼容的情况。可能会增加系统的复杂性。可能会降低代码的可读性。适配器模式分为类适配器、对象适配器、接口适配器 其中多个接口可以用一个适配器实现也可以这多个接口拆分成多个适配器单独处理但是这样可能就增加了代码的复杂度了。
3.7、桥接模式
桥接模式是多重继承的一种替代为了将抽象的部分和具体的部分结合起来但是不通过继承的方式来实现。通过组合的模式来代替继承完成。 符合合成复用原则、符合开放封闭原则但是增加了理解的难度。属于一种特殊的组合模式。
4、新设计模式
5、设计模式六大规则
单一职责原则Single Responsibility Principle (SRP)
开闭原则Open Close Principle (OCP)
里是替换原则Liskov Substitution Principle (LSP)
迪米特法则(最少知道原则) The Least Knowledge Principle (LKP)
接口隔离原则Interface Segregation Principle (ISP)
依赖倒置原则Dependency Inversion Principle(DIP)
6、设计模式总览
设计模式用的好就是架构师用的不好就是码农
7、设计原则
每个人都有义乌捍卫、遵守和完善原则原则可以修正但是不能肆意妄为。
SRP: 每个软件模块的职责要单一衡量标准是模块是否只有个被修改的原因职责越单一被修改的原因就越少模块的内聚性越高被复用可能性就越大也更容易被理解。
OCP: 软件实体应该对扩展开放对修改关闭。
LSP: 程序中父类型都应该可以正确地被子类型替换里是替换原则由2008年图灵奖得主美国第一位计算机科学女博士Barbara Liskov教授和卡内基.梅隆大学Jeannette Wing教授于1994年提出的。
ISP: 多个特定客户端接口要好于一个宽泛用途的接口。接口隔离原则认为不能强迫用户去依赖那些他们不适用的接口 换句话说使用多个接口比使用单一的总接口要好。
DIP: 模块之间的交互应该依赖抽象而非实现DIP要求高层模块不应该依赖于底层模块二者都应该依赖于抽象抽象不应该依赖于细节细节应依赖于抽象。
DRY: DRY原则特指在程序设计和计算中避免重复代码。
YAGNI: 极限编程提倡的原则是指你自以为有用的功能实际上都是用不到的因此处理核心功能之外其他的功能一概不要提前设计这样可以大大加快开发进程。
Rule of Three: 某个功能第三次出现的时候就有必要进行抽象化了第一次用到某个功能时写一个特定的解决方法第二次用到的时候复制上一次的代码第三次出现的时候才着手抽象化写出通用的解决方法。
KISS: 真正的简单绝不是毫无设计感上来就写代码而是宝剑锋从磨砺出亮剑的时候犹如一到华丽的闪电背后却又大量的艰辛和积累正真的简单不是不思考而是先发散再收敛在纷繁复杂中把握问题的核心。
POLA: 写代码不是写侦探小说要的简单易懂而不是是不是冒出个 Surprise。