JAVA 设计模式相关

接口隔离原则

 

单一原则

依赖倒转原则

 

里氏替换原则

子类中尽量不要重写父类的方法,适当的情况下,可以通过聚合,组合,依赖来解决问题,或者可以让类升级为基类

开闭原则

 

迪米特法则

 

合成复用原则

 

 

UML建模

类之间的关系:

依赖

 

 

泛化

实现关系

关联关系

聚合关系(可以分开)

 

组合关系(不可以分开)

设计模式

单例模式

饿汉式(静态常量)

饿汉式(静态代码块)

懒汉式(线程不安全)

懒汉式(线程安全,同步方法)

懒汉式(线程安全,同步代码块)

双重监察

静态内部类

主类装载时,内部类是不会装载的,只有用到内部类是才会装载,并且是线程安全的

getInstance()不需要加 synchronized

枚举(强烈推荐)

注意事项

工厂模式

简单工厂模式(静态工厂模式)

定义一个创建不同对象的工厂,由这个类来封装实例化对象的代码

 

工厂方法模式

抽象工厂模式

工厂模式在JDK源码中的应用:

Calendar类实例化调用了简单工厂模式

Calendar.getInstance()

工厂模式总结

 

原型模式

传统模式编写:

 

在spring中原型模式的运用:

 

  • 浅拷贝

  • 深拷贝

//深拷贝 - 方式 1 使用clone 方法
@Override
protected Object clone() throws CloneNotSupportedException {
   
   Object deep = null;
   //这里完成对基本数据类型(属性)和String的克隆
   deep = super.clone(); 
   //对引用类型的属性,进行单独处理
   DeepProtoType deepProtoType = (DeepProtoType)deep;
   deepProtoType.deepCloneableTarget  = (DeepCloneableTarget)deepCloneableTarget.clone();
   
   // TODO Auto-generated method stub
   return deepProtoType;
}

//深拷贝 - 方式2 通过对象的序列化实现 (推荐)

public Object deepClone() {
   
   //创建流对象
   ByteArrayOutputStream bos = null;
   ObjectOutputStream oos = null;
   ByteArrayInputStream bis = null;
   ObjectInputStream ois = null;
   
   try {
      
      //序列化
      bos = new ByteArrayOutputStream();
      oos = new ObjectOutputStream(bos);
      oos.writeObject(this); //当前这个对象以对象流的方式输出
      
      //反序列化
      bis = new ByteArrayInputStream(bos.toByteArray());
      ois = new ObjectInputStream(bis);
      DeepProtoType copyObj = (DeepProtoType)ois.readObject();
      
      return copyObj;
      
   } catch (Exception e) {
      // TODO: handle exception
      e.printStackTrace();
      return null;
   } finally {
      //关闭流
      try {
         bos.close();
         oos.close();
         bis.close();
         ois.close();
      } catch (Exception e2) {
         // TODO: handle exception
         System.out.println(e2.getMessage());
      }
   }
   
}

原型模式注意事项和细节:

 

建造者模式

传统模式:

 

建造者模式:

  • JDK中源码部分使用了建造者模式:

适配器模式

  • 类适配器

//适配器类
public class VoltageAdapter extends Voltage220V implements IVoltage5V {

   @Override
   public int output5V() {
      // TODO Auto-generated method stub
      //获取到220V电压
      int srcV = output220V();
      int dstV = srcV / 44 ; //转成 5v
      return dstV;
   }

}
public class Client {

   public static void main(String[] args) {
      // TODO Auto-generated method stub
      System.out.println(" === 类适配器模式 ====");
      Phone phone = new Phone();
      phone.charging(new VoltageAdapter());
   }

}
  • 对象适配器

 

public class VoltageAdapter  implements IVoltage5V {

   private Voltage220V voltage220V; // 关联关系-聚合
   
   
   //通过构造器,传入一个 Voltage220V 实例
   public VoltageAdapter(Voltage220V voltage220v) {
      
      this.voltage220V = voltage220v;
   }



   @Override
   public int output5V() {
      
      int dst = 0;
      if(null != voltage220V) {
         int src = voltage220V.output220V();//获取220V 电压
         System.out.println("使用对象适配器,进行适配~~");
         dst = src / 44;
         System.out.println("适配完成,输出的电压为=" + dst);
      }
      
      return dst;
      
   }

}
public class Client {

   public static void main(String[] args) {
      // TODO Auto-generated method stub
      System.out.println(" === 对象适配器模式 ====");
      Phone phone = new Phone();
      phone.charging(new VoltageAdapter(new Voltage220V()));
   }

}
  • 接口适配器
public abstract class AbsAdapter implements Interface4 {

   //默认实现
   public void m1() {

   }

   public void m2() {

   }

   public void m3() {

   }

   public void m4() {

   }
}
public class Client {
   public static void main(String[] args) {
      
      AbsAdapter absAdapter = new AbsAdapter() {
         //只需要去覆盖我们 需要使用 接口方法
         @Override
         public void m1() {
            // TODO Auto-generated method stub
            System.out.println("使用了m1的方法");
         }
      };
      
      absAdapter.m1();
   }
}

 

桥接模式

 

原理图:

 

装饰者模式

装饰类

策略模式

JDK 源码场景 compareTo

模板方法模式

属于行为性模式

 

 

 

委派模式

不同于23中设计模式,委派模式基本作用就是负责任务的调用和分配。和代理模式很像,可以看做是一种特殊情况下的静态全权代理,代理模式注重过程,委派模式注重结果。

派任务:老板-领导-员工

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值