Java设计模式简介

一.设计模式的六大原则:

1.        开闭原则:即对扩展开放,对修改关闭,实现热插拔效果

2.        里氏代换原则:是继承复用的基石,任何基类出现的地方都可以用衍生类替换,并增加新的功能

3.        依赖倒转原则:依赖于抽象,面向接口编程

4.        接口隔离原则:使用多个隔离的接库降低耦合性

5.        迪米特法则:一个实体应尽量少的与其他实体发生作用

6.        合成复用原则:尽量使用合成/聚合的方式

 

二.23种设计模式

1.工厂模式:

1)单工厂模式:面向接口编程,工厂类输入参数为某个标志(告诉工厂类需要创建的实际类型),返回值为接口类型,即可完成功能

2)多工厂模式:针对不同实体类对象的创建,构造不同的工厂方法,每个工厂方法返回值即为实体类共同的接口

3)静态工厂模式:即声明创建不同实体类对象的工厂方法为静态方法,则可以不用创建工厂对象本身,而直接通过工厂类.工厂方法()实现

4)抽象工厂模式:相同接口的不同实体类对应的不同工厂类需要实现共有的接口,以及实现其对应的接口方法,从而构造不同实体类的对象

2.单例模式:

好处:1)避免频繁创建对象时的系统开销

2)降低了系统内存的使用频度,减少GC压力

3)可以保证中心化服务的稳定运行

线程安全的单例模式

1.   private static class SingletonFactory{           

2.           private static Singleton instance = new Singleton();           

3.       }           

4.       public static Singleton getInstance(){           

5.           return SingletonFactory.instance;           

6.       }   

 

1.   private static synchronized void syncInit() {  

2.           if (instance == null) {  

3.               instance = new SingletonTest();  

4.           }  

5.       }  

6.     

7.       public static SingletonTest getInstance() {  

8.           if (instance == null) {  

9.               syncInit();  

10.         }  

11.         return instance;  

12.     }  

3.建造者模式

工厂模式与建造者模式区别:工厂模式关注的是创建单个产品,建造者模式则关注创建符合对象,一般而言建造者内部会有保存抽象接口类型的集合原型模式

4.原型模式

浅复制:当一个对象复制后,基本数据类型的变量会呗重新创建,引用类型指向原对象所指

1.     public Object clone() throws CloneNotSupportedException {  

2.           Prototype proto = (Prototype) super.clone();  

3.           return proto;  

4.       }  

 

深复制:当一个对象复制后,其基本数据类型和引用类型都需要重建

public Object deepClone() throws IOException, ClassNotFoundException {  

1.           /* 写入当前对象的二进制流 */  

2.           ByteArrayOutputStream bos = new ByteArrayOutputStream();  

3.           ObjectOutputStream oos = new ObjectOutputStream(bos);  

4.           oos.writeObject(this);  

5.     

6.           /* 读出二进制流产生的新对象 */  

7.           ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());  

8.           ObjectInputStream ois = new ObjectInputStream(bis);  

9.           return ois.readObject();  

10.     }  

 

1.   public class Prototype implements Cloneable {  

2.       public Object clone() throws CloneNotSupportedException {  

3.           Prototype proto = (Prototype) super.clone();  

4.           return proto;  

5.       }  

6.   }  

以上是5种创新型设计模式,接下来是7种结构型模式

 

5.适配器模式

1) 类的适配器模式:目的是使得Targetable接口的实现类具有Source类的功能,即创建一个适配类继承Source类,实现Targetable接口

2) 对象的适配器模式:凭借组合方式,利用对象属性,从而实现该对象的功能

3) 接口的适配器模式:首先创建某个接口的抽象类(实现所有方法),然后创建一个适配器类继承该抽象类,并重写想要的方法。

6.装饰者模式

装饰者和被装饰者需要实现相同的接口,装饰者中采用组合方式具有被装饰者的属性引用,适用场景是动态扩展类的功能

7.   代理模式

使用代理模式利于功能划分,便于后期维护,即客户端访问代理服务器,由代理服务器调用服务端逻辑处理,一般来说采用组合方式,将服务端对象引用作为代理类的属性,然后客户端请求代理类时,实际上是其服务端引用进行逻辑处理

8. 外观模式

将功能类的子功能模块作为属性保存,功能类的功能实际上是通过子功能模块有序执行,从而起到解耦合作用

9.桥接模式

基本思想是把事物与具体实现分开,使他们可以独立的变换,即将抽象化和实现化解耦合

即假设相同接口A的实现类有多个B,C,有一个抽象类将接口A作为属性引用,抽象类中的方法是基于接口A来实现,当需要基于B实现抽象类中的方法时,只需要set注入抽象类中实现属性引用,这样调用的方法即基于B来实现,例如JDBC的DriverManager连接不同的数据库

10.     组合模式

又称为部分-整体模式,处理树形问题,比如在一个类中定义其父节点和子节点的属性引用

11.     享元模式

目的是实现对象的共享,从而减少内存开销,类似于JDBC的连接池(getConnection()时若连接池还有剩余连接则直接返回并从连接池中删除,否则返回空),当在共享池中发现符合条件的享元单元,则直接返回;否则需要创建,大大减少了实例数量,实现了资源的重复利用

12.     策略模式

定义了一系列的算法,并将这些算法封装起来,使他们可以相互替换,算法的变换不会影响到使用算法的用户,策略模式多用在算法决策系统,外部用户只需要决定使用哪个算法即可

13.     模版方法模式

有一个抽象类,有主方法和多个抽象方法,子类继承抽象类并实现了其抽象方法,当子类对象复制给抽象类引用,抽象类引用调用主方法时,主方法中执行的方法即为子类重定义的抽象方法

14.     观察者模式

被观察者发生变化时会通知其所有的观察者,观察者也随之变化,类与类之间的关系为观察者与被观察者

有一个抽象类管理着所有观察者列表,包括增加观察者,删除观察者,通知所有观察者等等,被观察对象必须继承这个抽象类,当自身发生变化时通知所有观察者,所有的观察者进行相应的处理

15.     迭代子模式

迭代器模式就是指顺序访问聚集对象中元素,这个过程分别两种对象分别为聚集对象(需要访问的对象)和迭代对象(用于对聚集对象进行访问),集合对象一般为聚集对象(迭代器对象作为其属性引用,除此之外还具有多个集合方法),迭代器对象(集合对象作为其属性引用,除此之外还定义了很多迭代器方法,包括previous返回前一个元素,next()返回后一个元素,hasNext()是否有后一个元素等)

16.     责任链模式

每个对象持有下一个对象的引用,请求在该链上传递,直到某个对象决定处理该请求

17.     命令模式

命令模式的目的是达到命令的发送者和执行者之间解偶,实现请求与执行分离

18. 备忘录模式

保存一个对象的状态,以便恢复对象,其中包括原始类(定义创建备忘录以及从备忘录中恢复属性的方法),备忘录类(定义需要保存的属性),备忘录存储类(保存备忘录)

19. 状态模式

当对象状态发生变化后同时改变其行为,一般为状态类(定义不同的状态集合),上下文类(当前状态)

20. 访问者模式

   将数据结构和作用于数据结构上的操作解耦合,使得操作集合可以自由演化,适用于数据结构相对稳定但算法易变化的系统,将有关行为集中到一个访问者对象中,而不影响数据结构,通过增加访问者来增加算法或者行为

    21.中介者模式

用于降低类与类之间的耦合性,,类与类之间的关系及调度交由Mediator处理,只需要维护好中介类与实体类之间的依赖关系,由中介去统一调度行为

22. 解释器模式

用于做各种解释器,包括正则表达式的解释器等等

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值