设计模式相关

来源:互联网 发布:生日祝福网站源码 编辑:程序博客网 时间:2024/05/22 04:32

一、单例模式:要点有三个;一是某各类只能有一个实例;二是它必须自行创建这个事例;三是它必须自行向整个系统提供这个实例。方便资源共享。用于 资源管理器。Spring对接受容器管理的全部的bean,默认采用单态模式管理,可避免Java 类被多次实例化,让相同类的全部实例共享同一内存区。

  1. public class Singleton {  
  2.     private static Singleton instance;  
  3.     private Singleton (){}  
  4.   
  5.     public static synchronized Singleton getInstance() {  
  6.     if (instance == null) {  
  7.         instance = new Singleton();  
  8.     }  
  9.     return instance;  
  10.     }  
  11. }   (懒汉,线程不安全。有延迟加载功能,但是多线程的话不能正常工作)
  12. ——————————————————————————————————————————————————————————————————————————————
    1. public class Singleton {  
    2.     private static Singleton instance = new Singleton();  
    3.     private Singleton (){}  
    4.     public static Singleton getInstance() {  
    5.     return instance;  
    6.     }  
    7. }  (饿汗)
    ————————————————————————————————————————————————————————————————————————————
    1. public class Singleton {  
    2.     private static class SingletonHolder {  
    3.     private static final Singleton INSTANCE = new Singleton();  
    4.     }  
    5.     private Singleton (){}  
    6.     public static final Singleton getInstance() {  
    7.     return SingletonHolder.INSTANCE;  
    8.     }  
    9. }   (静态内部类)

二、工厂模式:客户代码需要某个对象,但却不关心这个对象究竟是由哪个类创建。即 定义一个用于创建对象的接口,并控制返回哪个类的实例。范例:迭代器实例(访问容器的类)的创建。Spring容器是最大的工厂(BeanFactory,ApplicationContext和BeanFactory差不多,ApplicationContext接口扩展于BeanFactory。ClassPathXmlApplicationContext和FileSystemXmlApplicationContext区别:ClassPath可以在整个类路径(包括JAR文件)中寻找定义Bean的XML文件;而FileSystem只能在指定路径中寻找。),使用配置文件管理所有的bean ,Spring工厂模式,不仅提供了创建bean的功能,还提供了对bean的生命周期的管理。
工厂模式,简单工厂模式,抽象工厂模式三者有什么区别?
工厂模式,在简单工厂中间插入了一个具体产品工厂,这个工厂知道产品构造时候的具体细节,而简单工厂模式的产品具体构造细节是在一个个if/else分支,或者在switch/case分支里面的。工厂模式的好处就在于将工厂和产品之间的耦合降低,将具体产品的构造过程放在了具体工厂类里面。在以后扩展产品的时候方便很多,只需要添加一个工厂类,一个产品类,就能方便的添加产品,而不需要修改原有的代码。而在简单工厂中,如果要增加一个产品,则需要修改工厂类,增加if/else分支,或者增加一个case分支,工厂模式符合软件开发中的OCP原则(open close principle),对扩展开放,对修改关闭。
区别:
①工厂方法模式只有一个抽象产品类(一个抽象产品类,可以派生出多个具体产品类);而抽象工厂模式有多个多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。
②工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个具体产品类的实例

三、代理模式:当客户端代码需要调用某个对象时,客户端实际上不关心是否准确得到该对象,它只要一个能提供该功能的对象即可,此时我们就可返回该对象的代理(Proxy)即为对象建立了一个占位符,用来管理对目标对象的访问。 范例:图像代理(用来避免将较大的(或全部的)对象加载到内存中);远程代理;动态代理(提供了一种增加可复用功能的机制)
、命令模式:将请求封装在对象的内部。范例:菜单命令(每个菜单项关联一个对象,用户单击菜单项时,可以执行相关的行为)
五、原型模式(Prototype):复制一个现有的对象来生成新的对象,而不是通过实例化的方式。
六、适配器模式:该模式可以使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作,我们可以重用一个现有的类,当客户端通过接口表达一个需求时,我们可以创建一个实现了该接口的类,并且使该类继承现有的类,从而将对客户端的调用转换为对现有类方法的调用
七、观察者模式:在多个对象之间定义一对多的依赖关系,当一个对象的状态发生变化时,会通知依赖于它的对象,并根据新状态做出相应的反应。java事件机制的底层实现,就是通过观察者模式实现的。这种模式经常出现在GUI应用程序中。对规模较小的应用程序,通常的做法是注册一个单独的对象,它负责接收GUI中的所有事件(有点违背观察者模式职责分离的意图)。对于大型的GUI程序,建议使用MVC模式,让每一个相关对象注册自己的事件,而不是让一个中间对象负责注册所有的事件。这有利于创建相互独立的松耦合的层级系统

0 0
原创粉丝点击