• 设计模式补漏


    聚合关系:表示整体和部分的关系,部分可以脱离整体而存在

    组合关系:也表示整体和部分的关系,但是整体和部分由相同的生命周期

    1.单例模式分为懒汉式和饿汉式

    饿汉式:
      public class Singleton{
      private static Singleton singleton = new Singleton ();
      private Singleton (){}
      public Singleton getInstance(){return singletion;}
      } 

      懒汉式:
      public class Singleton{
      private static Singleton singleton = null;
      public static synchronized synchronized getInstance(){
      if(singleton==null){
      singleton = new Singleton();
      }
      return singleton;
      }
      } 

      比较:
      饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变
      懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的
      推荐使用第一种 

    2.实现相对于单例模式的多例模式

    3.原型模式中的浅复制和深复制

      浅复制:如果是基本类型的话,那么直接拷贝一份,如果是对象的话,则复制引用,也就是指向原对象。

      深复制:不论是基本类型,还是对象,都复制一份,还原对象完全区分开

    4.简单工厂模式又叫做静态工厂模式

    5.享元模式:

      若一个对象的状态可以分为内部状态和外部状态,但是内部状态较多时,我们使用享元模式,先保存对象内部状态

      到一个工厂,然后使用时直接返回这个对象给另一个对象,多个对象共享这个对象的内部状态,然后在对另一个对象

      设置外部状态,当大量相似对象很多时,用共享对象代替内部状态,只用设置外部状态。(外部状态不属于对象的一部分)

    6.外观模式:提供统一的接口,封装复杂逻辑

    7.代理模式:声明一个抽象主题,然后代理和真是主题继承自抽象主题,代理中保存抽象主题的实例

      虚拟代理:要创建一个资源消耗大的对象,先创建一个资源消耗小的对象,真是对象只有在使用时才被创建

      远程代理:位于不同地址空间中的对象提供一个本地代理对象

      保护代理:控制一个对象的访问,可以给不同用户,不同级别的访问

    8.桥接模式:将抽象化和实例化解耦,使二者可以独立的变化(不同平台播放不同的视频文件)

    9.适配器模式:对接口进行改造,是接口不兼容的那些类可以正常的工作

    10.组合模式:通过组合多个对象,形成树形结构,以表示整体和部分的关系,一般包括,抽象主题,然后实体主题和容器继承抽象主题,比如文件和文件夹的关系。

    11.观察者模式:定义了一种一对多的关系模式,有一个主题,可以添加和删除观察者,当一个对象发生改变的时候,其相关对象都得到通知并被自动更新。

    12.职责链模式:一个请求没有被应答是会沿着链往上走,知道找到相应的对象来应答

    13.命令模式:将执行命令和发出命令分别封装成不同的对象,一方不必要知道另一方的接口

    14:解释器模式:对应解释型的语言的类型

      

    //文法如下
    expression::= direction action distance | composite
    composite::=expression 'and' expression
    direction::='up' | 'down' | 'left' | 'right'
    action::='run'| 'move'
    distance::=an integer
    
     abstract class AbstractNode()
    {
           public abstract String interpret();
    }
    
    //and解释器
    
    class AndNode extends AbstractNode()
    {
          private AbstractNode left;
          private AbstractNode right;
    
          public AndNode(AbstractNode left,AbstractNode right)
          {
                         this...
          }
          public String interpret()
          {
                 left.interpret()+"再"+right.interpret();
          }
    }
    

    可以用这个模式来定义解释器。。。。

  • 相关阅读:
    ajax入门之建立XHR对象 (1)
    JavaScript中的函数有什么特点? 应该怎样优化?
    什么是JavaScript中的面向对象? 与其他编程语言的面向对象有什么区别? 什么是原型?
    Web页面加载,如何分析页面性能?如何进行优化?
    一个页面从输入 URL 到页面加载完的过程中都发生了什么事情?
    关于清除浮动与闭合浮动
    如何更加安全快速的使用富文本编辑器
    用Python实现一个爬取XX大学电费通知的小脚本
    在Sublime Text3上面更加方便愉快的写php
    如何搭建一个WAMP环境
  • 原文地址:https://www.cnblogs.com/zhanglanyun/p/2549844.html
Copyright © 2020-2023  润新知