一 单例模式
    
    饿汉:
              public class SingleTon {
              private static final SingleTon INSTANCE = new SingleTon();
              private SingleTon() {
              }
              public static SingleTon getInstance() {
                  return INSTANCE;
              }
          }
          
     懒汉:
                  public class SingleTon {
                   private volatile static SingleTon INSTANCE = null;
                   private SingleTon() {
                   }
                   public static SingleTon getInstance() {
                       if (INSTANCE == null) {
                           synchronized (INSTANCE) {
                               if (INSTANCE == null)
                                   INSTANCE = new SingleTon();
                           }
                       }
                       return INSTANCE;
                   }
               }
                    
    对比:因为对象在构造的时候可能会有时间开销,因此在多线程的时候需要考虑到线程安全,voliate关键字只能保证对象的可见性, synchronized保证线程安全           
                    
    二:  工厂模式
      
             类图:
    
                    
             普通工厂代码:       
                    
                    1.接口实现功能
                    
                              public interface Sender {
                                         public void send();
                                   }
                    2.  不同的类实现不同功能:
                         
                           QQ:   public class QQ implements Sender {
                                                 @Override
                                                     public void send() {
                                                     System.out.println("QQ send info");
                                                 }
                                  }
                           WeChat:      public class WeChat implements Sender {
                                                      @Override
                                                             public void send() {
                                                          System.out.println("WeChat send info");
                                                      }
                                        }
        
                       3.工厂创建对象    
              
                                 public class SendFactory {
                                            public static final String QQ = "QQ";
                                            public static final String WeChat = "WECHAT";
                                            public Sender product(String type) {
                                                if (SendFactory.QQ.equals(type)) {
                                                    return new QQ();
                                                    
                                                } else if (SendFactory.WeChat.equals(type)) {
                                                    return new WeChat();
                                                }
                                                return null;
                                            }
                                   }
                                                       
               普通工厂和工厂方法差不多,只是在普通工厂中创建对象需要一个参数(type),工厂方法中提供多个方法,不同方法创建不同工厂
               
               
     三 适配器模式   
                    
            类适配器:
            
              类图:
            
              代码:
              
                接口抽象共同功能:
                          public interface Targetable {
                                  public void method1();  
                                  public void method2();
                          }
            
            产品一实现了功能:
                            public class Source {
                             public void method1(){
                              System.out.println("method1....");
                   }
            
            新的产品需要功能2,创建适配器保证功能一二正常运行
            
            
                           public class SpecialAdapter extends Source implements Targetable {
                                  @Override
                                  public void method2() {
                                      System.out.println("method2 ...");
                                  }
                      }
            
            对象适配器:
            
                           public class SpecialAdapter implements Targetable {
                                            private Source source;
                                            public SpecialAdapter(Source source) {
                                                this.source = source;
                                            }
                                            @Override
                                            public void method2() {
                                                System.out.println();
                                            }
                                            @Override
                                            public void method1() {
                                                source.method1();
                                            }
               }
            
          适配器关键字:组合 继承 实现  
            
                    
                    
                    
原文:https://www.cnblogs.com/xiaoxiannvBlog/p/9427784.html