Java基础:设计模式

Java设计模式之享元模式:从基础到高级的全面解析 享元模式是一种结构型设计模式,旨在通过共享技术减少大量细粒度对象的内存消耗。其核心思想是将对象的“内在状态”与“外在状态”分离,内在状态存储在享元对象内部且可共享,而外在状态由客户端维护且不可共享。享元模式通过共享相似对象来减少创建新对象的数量,从而提高性能和节省资源。典型的实现包括抽象享元类、具体享元类、享元工厂类和客户端。享元工厂负责创建和管理享元对象,确保相同内在状态的对象只被创建一次。通过这种方式,享元模式在处理大量相似对象时能够显著降低内存占用。 阅读详情

java的设计模式大体上分为三大类

  • 创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式。
  • 结构型模式(7种):适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组合模式,享元模式。
  • 行为型模式(11种):策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

设计模式遵循的原则有6个

 

  • 开闭原则(Open Close Principle)
    • 对扩展开放,对修改关闭。
  • 里氏代换原则(Liskov Substitution Principle)
    • 只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。
  • 依赖倒转原则(Dependence Inversion Principle)
    • 这个是开闭原则的基础,对接口编程,依赖于抽象而不依赖于具体。
  • 接口隔离原则(Interface Segregation Principle)
    • 使用多个隔离的借口来降低耦合度。
  • 迪米特法则(最少知道原则)(Demeter Principle)
    • 一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。
  • 合成复用原则(Composite Reuse Principle)
    • 原则是尽量使用合成/聚合的方式,而不是使用继承。继承实际上破坏了类的封装性,超类的方法可能会被子类修改。

设计模式

 

  • 简单工厂模式(Simple Method)

    • 使用工厂模式的原因:

      • 工厂模式是为了解耦:把对象的创建和使用的过程分开。就是Class A 想调用Class B,那么只是调用B的方法,而至于B的实例化,就交给工厂类。

      • 工厂模式可以降低代码重复。如果创建B过程都很复杂,需要一定的代码量,而且很多地方都要用到,那么就会有很多的重复代码。可以把这些创建对象B的代码放到工厂里统一管理。既减少了重复代码,也方便以后对B的维护。

      • 工厂模式可以减少错误,因为工厂管理了对象的创建逻辑,使用者不需要知道具体的创建过程,只管使用即可,减少了使用者因为创建逻辑导致的错误。

    • 就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。首先看下关系图:

    • 举例如下:(我们举一个发送邮件和短信的例子)

    • //首先,创建二者的共同接口
      public interface Sender {  
          public void Send();  
      }
      --------------------------------------------------
      //其次,创建实现类
      public class MailSender implements Sender {  
          @Override  
          public void Send() {  
              System.out.println("this is mailsender!");  
          }  
      }
      
      public class SmsSender implements Sender {  
        
          @Override  
          public void Send() {  
              System.out.println("this is sms sender!");  
          }  
      }
      --------------------------------------------------
      //最后,建工厂类
      public class SendFactory {  
        
          public Sender produce(String type) {  
              if ("mail".equals(type)) {  
                  return new MailSender();  
              } else if ("sms".equals(type)) {  
                  return new SmsSender();  
              } else {  
                  System.out.println("请输入正确的类型!");  
                  return null;  
              }  
          }  
      } 
      --------------------------------------------------
      //我们来测试下
      public class FactoryTest {  
        
          public static void main(String[] args) {  
              SendFactory factory = new SendFactory();  
              Sender sender = factory.produce("sms");  
              sender.Send();  
          }  
      } 
      
      //输出:this is sms sender!
  • 抽象工厂模式(Abstract Factory)

    • 用来生成同一等级结构中的任意产品,,对于增加新的产品,需要修改已有代码
    • //创建面条基类
      public abstract class INoodles {
          /**
           * @Description: ${描述面条}
           * @param ${tags}
           * @return ${return_type}
           * @throws
           * @author RestartYang
           * @date 2018/5/8 10:20
           */
          public abstract void  desc();
      }
      //创建兰州拉面
      public class LzNoodles extends INoodles {
          @Override
          public void desc() {
              System.out.println("兰州拉面");
          }
      }
      //创建新疆拉面
      public class XjNoodles extends INoodles {
      
          @Override
          public void desc() {
              System.out.println("新疆拉面");
          }
      }
      //创建咸菜基类
      public interface XianCai {
          public void addTaste();
      }
      //创建老干妈咸菜
      public class LGMXianCai implements XianCai {
          @Override
          public void addTaste() {
              System.out.println("老干妈咸菜");
          }
      }
      //创建工厂抽象接口
      public interface Factory {
           INoodles createLZNoodles();
           XianCai createLGMXianCai();
      }
      //创建工厂实现类
      public class IFactory implements Factory {
          @Override
          public INoodles createLZNoodles() {
              return new LzNoodles();
          }
      
          @Override
          public XianCai createLGMXianCai() {
              return new LGMXianCai();
          }
      }
      //使用抽象工厂
      public class AbstractFactoryDemo {
          public static void main(String[] args) {
              Factory factory = new IFactory();
              INoodles lzNoodles = factory.createLZNoodles();
              lzNoodles.desc();
              XianCai xianCai = factory.createLGMXianCai();
              xianCai.addTaste();
          }
      }
  • 工厂方法模式(Factory Method)

    • 工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。
    • 请看例子:
    • public interface Sender {  
          public void Send();  
      }  
      --------------------------------------------------
      //两个实现类
      public class MailSender implements Sender {  
          @Override  
          public void Send() {  
              System.out.println("this is mailsender!");  
          }  
      }
      
      public class SmsSender implements Sender {  
        
          @Override  
          public void Send() {  
              System.out.println("this is sms sender!");  
          }  
      }
      --------------------------------------------------
      //再提供一个接口:
      public interface Provider {  
          public Sender produce();  
      }
      --------------------------------------------------
      //两个工厂类
      public class SendMailFactory implements Provider {  
                
          @Override  
          public Sender produce(){  
              return new MailSender();  
          }  
      }  
      
      public class SendSmsFactory implements Provider{  
            
          @Override  
          public Sender produce() {  
              return new SmsSender();  
          }  
      }  
      --------------------------------------------------
      //测试类
      public class Test {  
        
          public static void main(String[] args) {  
              Provider provider = new SendMailFactory();  
              Sender sender = provider.produce();  
              sender.Send();  
          }  
      } 
    • 其实这个模式的好处就是,如果你现在想增加一个功能:发及时信息,则只需做一个实现类,实现Sender接口,同时做一个工厂类,实现Provider接口,就OK了,无需去改动现成的代码。这样做,拓展性较好。

  • 单例模式(Singleton)

    • 单例模式是设计模式中最常见也最简单的一种设计模式,保证了在程序中只有一个实例存在并且能全局的访问到。
    • 优点:
      • 在系统内存中只存在一个对象,因此可以节约系统资源,对于一些需要频繁创建和销毁的对象单例模式无疑可以提高系统的性能。
    • 缺点:
      • 没有抽象层,因此扩展很难。
      • 职责过重,在一定程序上违背了单一职责
    • 常用的使用方式:
      • 饿汉式【在加载那个类的时候,对象的创建工作就已经完成了】​
      • package org.westos_03;
        
        //学生类
        class Student {
        	private Student() {
        		
        	}
        	
        	//成员位置创建该类的实例
        	//静态方法只能访问静态变量,所以这个Student方法要加上static,下边的方法才能调用这个对象s
        	//加入私有修饰,防止定义对象之前将Student s=null	
        	private static Student s = new Student() ; //静态的类变量
        	
        	//提供一个公共的成员方法
        	public static Student getStudent() {
        		return s ;
        	}
        }
        
        public class StudentDemo {
        	
        	public static void main(String[] args) {
        		
        		Student s1 = Student.getStudent() ;
        		Student s2 = Student.getStudent();
        		System.out.println(s1==s2);//true
        		
        		
        		
        		System.out.println(s1);  //org.westos_03.Student@70dea4e
        		System.out.println(s2);  //org.westos_03.Student@70dea4e
        	}
        }
        
      • 懒汉式【需要的时候才进行创建工作】​
      • package org.westos_04;
        
        //老师类
        class Teacher {
        	
        	//无参构造私有化
        	private Teacher() {
        		
        	}
        	
        	//在成员位置声明变量
        	//私有化,并且使用静态修饰
        	private static Teacher t = null ;
        	
        	//因为懒汉式是非线程安全的,所以需要使用同步方法(synchronized)解决;
        	//静态的同步方法  (锁对象: 类名.class)
        	public synchronized static Teacher getTeacher() {
        		if(t==null) {
        			t = new Teacher() ;
        		}
        		return t ;
        	}
        }
        
        public class TeacherDemo {
        	
        	public static void main(String[] args) {
        		
        		//调用getTeacher()功能
        		Teacher t1 = Teacher.getTeacher() ;
        		Teacher t2 = Teacher.getTeacher() ;
        		System.out.println(t1==t2);
        		System.out.println(t1);	//org.westos_04.Teacher@70dea4e
        		System.out.println(t2);	//org.westos_04.Teacher@70dea4e
        	}
        }
  • 建造者模式(Builder)

    • 在了解之前,先假设有一个问题,我们需要创建一个学生对象,属性有name、number、class、sex、age、school等属性,如果每一个属性都可以为空,也就是说我们可以只用一个name,也可以用一个school、name,或者一个class、number,或者其他任意的赋值来创建一个学生对象,这时该怎么构造?
    • public class Builder {
      
          static class Student{
              String name = null ;
              int number = -1 ;
              String sex = null ;
              int age = -1 ;
              String school = null ;
      
           //构建器,利用构建器作为参数来构建Student对象
              static class StudentBuilder{
                  String name = null ;
                  int number = -1 ;
                  String sex = null ;
                  int age = -1 ;
                  String school = null ;
                  public StudentBuilder setName(String name) {
                      this.name = name;
                      return  this ;
                  }
      
                  public StudentBuilder setNumber(int number) {
                      this.number = number;
                      return  this ;
                  }
      
                  public StudentBuilder setSex(String sex) {
                      this.sex = sex;
                      return  this ;
                  }
      
                  public StudentBuilder setAge(int age) {
                      this.age = age;
                      return  this ;
                  }
      
                  public StudentBuilder setSchool(String school) {
                      this.school = school;
                      return  this ;
                  }
                  public Student build() {
                      return new Student(this);
                  }
              }
      
              public Student(StudentBuilder builder){
                  this.age = builder.age;
                  this.name = builder.name;
                  this.number = builder.number;
                  this.school = builder.school ;
                  this.sex = builder.sex ;
              }
          }
      
          public static void main( String[] args ){
              Student a = new Student.StudentBuilder().setAge(13).setName("LiHua").build();
              Student b = new Student.StudentBuilder().setSchool("sc").setSex("Male").setName("ZhangSan").build();
          }
      }
  • 原型模式(Protype)

    • 原型模式就是讲一个对象作为原型,使用clone()方法来创建新的实例。
    • public class Prototype implements Cloneable{
      
          private String name;
      
          public String getName() {
              return name;
          }
      
          public void setName(String name) {
              this.name = name;
          }
      
          @Override
          protected Object clone()   {
              try {
                  return super.clone();
              } catch (CloneNotSupportedException e) {
                  e.printStackTrace();
              }finally {
                  return null;
              }
          }
      
          public static void main ( String[] args){
              Prototype pro = new Prototype();
              Prototype pro1 = (Prototype)pro.clone();
          }
      }
    • 此处使用的是浅拷贝,关于深浅拷贝,大家可以另行查找相关资料
  • 适配器模式(Adapter)

    • 适配器模式的意图是将一个已存在的 类 / 接口 进行复用,将其 转换 / 具体化 成客户希望的另外的一个类/接口。
    • package exercise;
      
      //定义一个手机类
      class Mobile{
        public static final int V=220; //定义接入手机的电压为220伏
        //需要进入电源适配器 否则手机就炸了
        private VoltageAdapter voltageAdapter;
      
        public Mobile(VoltageAdapter voltageAdapter) {
            this.voltageAdapter = voltageAdapter;
        }
        //手机充电
        public void charge(){
            //调用适配器方法以替换手机的充电方法
            voltageAdapter.StepDownCharge();
        }
      }
      
      //电源适配器 --降压
      class VoltageAdapter{
        //降压充电 --额定充电
        public void StepDownCharge(){
            System.out.println("准备充电...");
            System.out.println("原始电压:" + Mobile.V + "V");
            System.out.println("经过变压器转换之后的电压:" + (Mobile.V - 200) + "V");
            System.out.println("快速充电中...");
        }
      }
      
      public class Test3 {
          public static void main(String args[]){
              //创建一个电源适配器
              VoltageAdapter voltageAdapter = new VoltageAdapter();
              //创建一个手机
              Mobile mobile = new Mobile(voltageAdapter);
              //充电
              mobile.charge();
          }
      }
  • 装饰模式(Decorator)

    • 动态地给一个对象添加一些额外的职责。就增加功能来说, Decorator模式相比生成子类更为灵活。该模式以对客 户端透明的方式扩展对象的功能。
    • image.png
    • 例如:
    • //Component
      public interface Person {
      
          void eat();
      }
       
      //ConcreteComponent 
      public class Man implements Person {
      
          public void eat() {
              System.out.println("男人在吃");
          }
      }
      
      //Decorator
      public abstract class Decorator implements Person {
      
          protected Person person;
          
          public void setPerson(Person person) {
              this.person = person;
          }
          
          public void eat() {
              person.eat();
          }
      }
      
      //ConcreteDectrator
      public class ManDecoratorA extends Decorator {
      
          public void eat() {
              super.eat();
              reEat();
              System.out.println("ManDecoratorA类");
          }
      
          public void reEat() {
              System.out.println("再吃一顿饭");
          }
      }
      
      public class ManDecoratorB extends Decorator {
          
          public void eat() {
              super.eat();
              System.out.println("===============");
              System.out.println("ManDecoratorB类");
          }
      }
      
      //Test 
      public class Test {
      
          public static void main(String[] args) {
              Man man = new Man();
              ManDecoratorA md1 = new ManDecoratorA();
              ManDecoratorB md2 = new ManDecoratorB();
              
              md1.setPerson(man);
              md2.setPerson(md1);
              md2.eat();
          }
      }
  • 代理模式(Proxy)

    • 所谓代理模式是指客户端并不直接调用实际的对象,而是通过调用代理,来间接的调用实际的对象。
    • 代理模式的UML图:
    • 客户端通过代理类访问,代理类实现具体的实现细节,客户只需要使用代理类即可实现操作。
    • ​​​​​​​这种模式可以对旧功能进行代理,用一个代理类调用原有的方法,且对产生的结果进行控制。
    • //Subject接口的实现
      interface Subject {
          void visit();
      }
      
      //实现了Subject接口的两个类:
      class RealSubject implements Subject {
      
          private String name = "byhieg";
      
          @Override
          public void visit() {
              System.out.println(name);
          }
      }
      class ProxySubject implements Subject{
      
          private Subject subject;
      
          public ProxySubject(Subject subject) {
              this.subject = subject;
          }
      
          @Override
          public void visit() {
              subject.visit();
          }
      }
      
      //具体的调用如下
      public class Client {
          public static void main(String[] args) {
      
              ProxySubject subject = new ProxySubject(new RealSubject());
              subject.visit();
          }
      }
  • 外观模式(Facade)

    • ​​​​​​​外观模式(Facade),他隐藏了系统的复杂性,并向客户端提供了一个可以访问系统的接口。这种类型的设计模式属于结构性模式。为子系统中的一组接口提供了一个统一的访问接口,这个接口使得子系统更容易被访问或者使用。
  • 桥接模式(Bridge)

    • 桥接模式就是把事物和其具体实现分开,使他们可以各自独立的变化。桥接的用意是:将抽象化与实现化解耦,使得二者可以独立变化
    • //先定义接口
      public interface Sourceable {  
          public void method();  
      }  
      
      //分别定义两个实现类
      public class SourceSub1 implements Sourceable {  
        
          @Override  
          public void method() {  
              System.out.println("this is the first sub!");  
          }  
      }  
      
      public class SourceSub2 implements Sourceable {  
        
          @Override  
          public void method() {  
              System.out.println("this is the second sub!");  
          }  
      }  
      
      //定义一个桥,持有Sourceable的一个实例
      public abstract class Bridge {  
          private Sourceable source;  
        
          public void method(){  
              source.method();  
          }  
            
          public Sourceable getSource() {  
              return source;  
          }  
        
          public void setSource(Sourceable source) {  
              this.source = source;  
          }  
      }  
      
      public class MyBridge extends Bridge {  
          public void method(){  
              getSource().method();  
          }  
      }  
      
      //测试类
      public class BridgeTest {  
            
          public static void main(String[] args) {  
                
              Bridge bridge = new MyBridge();  
                
              /*调用第一个对象*/  
              Sourceable source1 = new SourceSub1();  
              bridge.setSource(source1);  
              bridge.method();  
                
              /*调用第二个对象*/  
              Sourceable source2 = new SourceSub2();  
              bridge.setSource(source2);  
              bridge.method();  
          }  
      }  
      
      //输出:
      //this is the first sub!
      //this is the second sub!
  • 组合模式(Composite)​​​​​​​​​​​​​​

    • 将对象组合成树形结构以表示“部分-整体”的层次结构。
    • 组合模式使得用户对单个对象和组合对象的使用具有唯一性。
  • 享元模式(Flyweight)

    • ​​​​​​​享元模式:“享”就是分享之意,指一物被众人共享,而这也正是该模式的终旨所在。
    • 享元模式有点类似于单例模式,都是只生成一个对象来被共享使用。这里有个问题,那就是对共享对象的修改,为了避免出现这种情况,我们将这些对象的公共部分,或者说是不变化的部分抽取出来形成一个对象。这个对象就可以避免到修改的问题。
    • 享元的目的是为了减少不会要额内存消耗,将多个对同一对象的访问集中起来,不必为每个访问者创建一个单独的对象,以此来降低内存的消耗。
  • 命令模式(Order)

    • ​​​​​​​命令模式是数据驱动设计模式,属于行为模式类别。 请求作为命令包装在一个对象下,并传递给调用器对象。 调用者对象查找可以处理此命令的适当对象,并将命令传递到执行命令的相应对象。
    • ​​​​​​​​​​​​​​
《JAVA 基础: 设计模式》 四、单例(Singleton)设计模式 设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式。设计模免去我们自己再思考和摸索。就像是经典的棋谱,不同的棋局,我们用不同的棋谱。”套路” 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。如果我们要让类在一个虚拟机中只能产生一个对象,我们首先必须将类的构造器的访问权限设置为private,这样,就不能用new操作符在类的外部产生类的对象了, 阅读详情

相关推荐

Java编程基础教程:Java设计模式

1.背景介绍 Java设计模式是一种软件设计的思想和方法,它提供了一种解决问题的方法,使得代码更加灵活、可维护和可扩展。Java设计模式可以帮助我们更好地组织代码,提高代码的可重用性和可读性。 在本教程中,我们将讨论Java设计模式的核心概念、算法原理、具体操作步骤、数学模型公式、代码实例和未来发展趋势。

AI天才研究院 139

Java的23种设计模式

大话java23种设计模式,通俗易懂

初心不忘、始终方得 6508

11、Java设计模式:从基础构建到重要模式应用

本文深入探讨了Java中几种重要的设计模式,包括适配器模式、模型-视图-控制器模式(MVC)、命令模式、策略模式和组合模式。通过具体的代码示例,展示了这些模式的实际应用场景及实现方式,帮助开发者构建灵活、可维护和可扩展的软件系统。

git9versioner的博客 52

一次性讲清Java23种设计模式

基本掌握23种设计模式的基本概念并能够写出相应的例子。

wdj_yyds的博客 3458

从零构建eSIM RSP服务:云原生架构与GSMA合规实践

本文详细阐述了从零开始构建一个符合GSMA SAS-SM安全标准的云原生eSIM RSP服务的完整路径。内容涵盖云原生基础设施选型、容器化部署、GSMA标准接口集成,并重点分享了通过SAS-SM安全审计的实战经验与避坑指南,为物联网及智能设备企业自建可控的远程SIM配置服务提供了系统性的解决方案。

weixin_29322553的博客 458

记一次在JAVA中客户端使用axis调用webservice服务端出现的异常:Unmarshalling Error: For input string: ""

在使axis调用webservice服务端,参照网上给的demo: Call call = (Call) service.createCall(); call.setTargetEndpointAddress(endpoint);//设置服务请求路径 QName qn = new QName(name); call.setOperationName(qn); call.addParamet

kry1201的专栏 8079

JAVA最全设计模式(23种并附带示例)

将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化、对请求排队或记录请求日志,以及支持可撤销的操作。定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的类可以一起工作。定义: 创建型设计模式主要用于对象的创建过程,对对象的创建进行抽象,隐藏对象创建的具体逻辑。给定一个语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。

qq_45105233的博客 8569

中国全国地面站点数据(1981-2010)、月平均气象、月平均降水、月平均相对湿度、月最大降水、月最高温度最低温度、月最高温平均值最低温平均值、高低温站点基础数据,气候数据

中国全国地面站点数据(1981-2010)、月平均气象、月平均降水、月平均相对湿度、月最大降水、月最高温度最低温度、月最高温平均值最低温平均值、高低温站点基础数据 b_china_mon_avg_data_pressure月平均气象 b_china_mon_avg_data_rain月平均降水 b_china_mon_avg_data_rhu月平均相对湿度 b_china_mon_max_data_rain月最大降水 b_china_mon_max_min_data_tem月最高温度最低温度 b_china

无极低码 2万+

Java 中的 23 种设计模式详解

项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛应用的原因。,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。

微笑听雨 7万+

UE5在Ubuntu22.04.4下的高效开发环境配置指南

本文详细介绍了在Ubuntu 22.04.4系统上配置UE5高效开发环境的完整指南,包括系统准备、显卡驱动安装、UE5引擎编译与配置、开发工具链设置以及性能优化技巧。通过逐步指导,帮助开发者快速搭建稳定的UE5开发环境,解决常见问题,提升开发效率。

weixin_29251131的博客 382

Xilinx PL端DP显示接口开发实战(一)——环境搭建与硬件选型

本文详细介绍了Xilinx PL端DP显示接口开发的环境搭建与硬件选型实战经验。从Vivado和Vitis 2021.1版本的软件安装要点,到DP141和MCDP6000芯片的选型建议,再到DP1.4接口的RX/TX方向开发关键点,为开发者提供了全面的技术指导。文章还分享了IP核配置、BD原理图设计以及常见问题排查的实用技巧,帮助开发者高效完成Xilinx DP接口开发项目。

weixin_29250573的博客 171

Java设计模式之七大设计原则

Java设计模式之七大设计原则 本文对Java设计模式中的七大设计原则进行汇总介绍,提炼最核心的概念。 设计模式总结笔记 一、设计模式七大原则 设计模式的目的: 代码可重用性:相同功能的代码,不用多次编写。 可读性:编程规范性,便于其他程序员的阅读和理解。 可扩展性:当需要增加新的功能的时候,非常方便,称为可扩展性。 可靠性:当我们新增功能后,对原来的功能没有影响。 使程序呈现高内聚、低耦合特性。 1.1、单一职责原则 不遵守单一职责原则: 对类来说的,就是一个类应该只负责一项职责。 比如:Us

qq_49529322的博客 1万+

电源完整性分析:PDN阻抗与去耦电容设计——目标阻抗计算与电容选型深度实战

摘要:随着嵌入式处理器主频突破 GHz、多核架构普及,电源完整性(Power Integrity, PI)已成为高速 PCB 设计中不可忽视的关键环节。本文从 PDN(电源分配网络)阻抗模型出发,系统讲解目标阻抗计算方法、去耦电容选型策略、反谐振抑制技术,并结合 STM32F4 核心板的完整设计实例,提供一套可落地的电源完整性工程实践方案。电源完整性设计是一项系统工程,需要从目标阻抗计算电容选型反谐振抑制PCB 布局目标阻抗是设计的起点,由电源电压、纹波要求和瞬态电流决定去耦电容。

从事移动开发八年,csdn博客专家,阿里云特邀专家,华为云云享专家,高级网络信息安全工程师,大数据工程师(高级),python技术开发(高级),HarmonyOS 应用开发者高级认证,现在某学校任教。 1万+

java基础知识④:设计模式

java基础知识④:设计模式

两点 1372

SAP Build Work Zone standard edition 订阅报错 OIDC trust missing 的成因与完整解决路径

摘要:用户订阅SAP Build Work Zone时遇到422错误,提示未配置OpenID Connect信任。该错误表明业务用户需通过SAP Cloud Identity Services的OIDC协议认证,而当前子账户仅配置了SAML信任或未配置信任。解决方法是进入子账户的Trust Configuration页面,使用Establish Trust功能建立与SAP Cloud Identity Services的OIDC信任关系。这是SAP新版服务的强制要求,SAML协议已不被支持。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 197

题解:AcWing 6051 看病

等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。但医院的排队不同其他排队,因为多数情况下,需要病情严重的人优先看病,所以希望BSNY设计系统时,以病情的严重情况作为优先级,判断接下来谁可以去看病。具体是这样的,最近来医院看病的人越来越多了,因此很多人要排队,只有当空闲时放一批病人看病。的操作,输出此时还在排队人中,优先级最大的患者姓名和优先级。后面没有输入,但需要你输出。

团爸讲算法 589

Java继承机制完全指南:从基础到设计模式应用

🔑黄金法则继承复用代码块,is-a关系要明确;父类抽象子类实,方法重写更灵活;组合优先继承后,深继承链要不得;多态应用显神通,面向对象真谛得!好的继承设计就像好的家族教育——既要传承精华,又要鼓励创新!

全栈开发工程师 1064

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

黑马程序员-Java基础:设计模式总结

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——Java基础部分设计模式一、设计模式概述 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 1.设计模式不是一种方法和技术,而是一种思想 2.设计模式和具体的语言无关,学习设计模式就

BlackHorseKevin的博客 862

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

java基础案例:单例设计模式

/*单例设计模式:必须对于多个程序使用同一个配置信息对象时,就需要保证该对象的唯一性如何保证对象的唯一性:1、不允许其它程序用enw创建该类对象2、在该类中创建一个本类实例3、对外提供一个方法让其它程序可以获取该对象步骤:1、私有化该类构造函数2、通过new在本类中创建一个本类对象3、定义一个公有的方法,将创建的对象返回*/public class Single_Demo{ public stat...

Z1888202的博客 290

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Java基础:23种Java设计模式

设计模式主要分三个类型:创建型、结构型和行为型。 其中创建型有: 一、Singleton,单例模式:保证一个类只有一个实例,并提供一个访问它的全局访问点 二、Abstract Factory,抽象工厂:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体类。 三、Factory Method,工厂方法:定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Met...

java03_15的博客 79

Java设计模式全面详解:从基础到高级的23种模式简介

设计模式是软件设计中解决常见问题的典型方案,分为创建型、结构型和行为型三大类。创建型模式主要处理对象创建机制,包括单例模式、工厂方法模式、抽象工厂模式和建造者模式等。单例模式确保一个类只有一个实例,工厂方法模式通过子类决定实例化哪个类,抽象工厂模式创建相关对象的家族,而建造者模式则将复杂对象的构建与表示分离。这些模式通过预定义的解决方案,提高了代码的可维护性和可扩展性。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 623

重拾Java基础知识:设计模式

设计模式的目标是隔离代码中的更改

码农的艺术 933
上一篇: 问题:Java中,char型变量中能不能存储一个中文汉字,为什么?
下一篇: 线程中的死锁、数据库中的锁、避免死锁的算法
Future_LL
博客等级 码龄9年 215粉丝 255原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值