zoukankan      html  css  js  c++  java
  • 设计模式补漏

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

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

    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();
          }
    }
    

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

  • 相关阅读:
    [NHibernate]第一个NHibernate的应用配置
    [NHibernate]利用LINQPad查看NHibernate生成SQL语句
    [NHibernate]查看NHibernate生成的SQL语句
    Twitter的分布式自增ID雪花算法snowflake (Java版)
    雪花算法:生成分布式全局唯一ID
    数据加密共享与签名方案
    Java 8中处理集合的优雅姿势——Stream
    消息中间件选型分析——从Kafka与RabbitMQ的对比来看全局
    从概念到底层技术,一文看懂区块链架构设计(附知识图谱)
    以太坊源码分析——BlockChain
  • 原文地址:https://www.cnblogs.com/zhanglanyun/p/2549844.html
Copyright © 2011-2022 走看看