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

戴尔笔记本装Ubuntu 20.04,别急着分区!先搞定这个BIOS设置(Intel RST避坑指南)

本文详细介绍了在戴尔笔记本上安装Ubuntu 20.04时遇到的Intel RST技术兼容性问题及解决方案。通过安全切换至AHCI模式,避免安装过程中找不到硬盘的常见问题,并提供双系统分区策略和安装后的优化建议,确保Ubuntu与Windows 10双系统稳定运行。

weixin_31315567的博客 268

数据结构:五岔路口交通管理红绿灯设计

我们可以知道这是一个“图”的着色问题,首先要考虑,为什么可行路线是13条?当然可以通过穷举得出,如果用公式:则是: 或者 因为一条路线必须包括一出一进两个方向 第一种答案的解法: 一、固定E为入口,则有C_4^1=4的可能; 二、除去E(因为E只有一个入向),剩下ABCD四个路口,然后因为C只有一个出方向,所以从剩下 的ABD中选择一个入口,即C_3^1; 三、再从剩下的三个出口任选

潘猫猫的世界 1万+

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

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

qq_45105233的博客 8569

快手商业化风控内容审核场景下的大模型早期探索与应用

在处理大量的自动语音识别(ASR)输出时,面临的主要挑战之一是文本的冗长和格式混乱,这严重影响了审核人员的阅读效率。为了解决这一问题,我们利用大模型的理解能力对文本进行智能总结,可以显著优化文本内容,使其更加清晰并且具有可读性。该方式极大地提高了审核过程的效率,审核人员可以更快地处理信息,减少了处理时间和劳动强度。

kuaishoutech的博客 2736

Java 中的 23 种设计模式详解

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

微笑听雨 7万+

二进制、八进制、十六进制、十进制转换详解

二进制是计算机的语言,正如我们使用汉语表达与交流信息一样,任何信息在计算机中都以二进制的形式存储和计算。了解二进制与十进制等进制之间的转换方法,有助于我们了解计算机内部的数字计算过程,可以帮助我们在一定程度上理解信息在计算机中的编码和解码过程。本文先简单介绍位置化数字系统的概念,然后详细讲解二进制、八进制、十六进制、十进制之间的转换方法与原理。

2301_81674797的博客 2095

qmc5883p芯片坐标系方向定义

问题 最近一个项目用到qmc5883p, 然而确定磁力计方向的时候发现datasheet上写的不是很清楚, 并且example中还有一个设置方向的一步, 于是测试了芯片坐标方向并记录了下来; 该芯片和qmc5883L方向并不一致; 结果 qmc5883P的datasheet给出来如下说明, Y为笔者添加的; 但是这个方向是按照datasheet的example设置的结果: //Define the sign for X Y and Z axis qmc5883p_write_reg(0x2

时有限 4112

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

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

qq_49529322的博客 1万+

Qemu开发ARM篇-5、buildroot制作根文件系统并挂载启动

在上一篇中,我们编译了kernel,并在qemu上进行了运行,但到最后,在挂载根文件系统时候,挂载失败,这是因为我们还没有根文件系统,在本章中,我们将制作根文件系统。rootfs制作方式有很多方式,如busyBoxbuildrootYocto等,在该篇章中,我们使用buildroot来制作根文件系统,主要考虑到busyBox制作完还需要手动首改一些启动配置比较繁琐,而Yocto如果电脑配置不是很好,编译时间过长,比较麻烦。

sinat_33909696的博客 2463

java基础知识④:设计模式

java基础知识④:设计模式

两点 1372

【基于CKF的IMM】CV和CT两个模型下的IMM,二维,滤波使用CKF(容积卡尔曼滤波),附完整的matlab代码

该文章摘要: 本文提出了一种基于交互多模型(IMM)和容积卡尔曼滤波(CKF)的融合定位算法,用于解决目标在直线运动和转弯机动之间的模型切换问题。通过MATLAB仿真实现了IMM-CKF算法,并与单一的CV-CKF(匀速模型)和CT-CKF(匀角速转弯模型)方法进行对比。实验结果表明,在包含直线段和转弯段的复合轨迹跟踪中,IMM-CKF方法能够自适应调整模型权重,显著提高了定位精度。轨迹跟踪图、位置/速度误差对比图以及模型概率曲线直观展示了IMM算法的优势。文章提供了完整的MATLAB实现代码,可用于目标跟

985工科博士毕业,专攻定位、导航和滤波等算法研究。从业10年,主要使用MATLAB 614

2025年软件测试职业院校技能大赛—ERP管理平台-采购管理采购入库模块测试用例

竞赛对接软件测试相关标准,以“ERP管理平台” 为被测系统,围绕软件测试领域的主流技术及工具,考查选手面 对实际问题的综合分析能力,对测试文档、测试用例的设计能力, 对单元测试、自动化测试、性能测试、接口测试等测试工具及方 法的掌握程度,检验选手团队协作能力、组织规划能力、方法运用能力等。

我是网络安全兼技能大赛工程师,专注网络安全技术学习与技能大赛实战!持续分享最新的技术文章,帮你少走弯路,一起在技术赛道上进步~ 398

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

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

全栈开发工程师 1064

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

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

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

BlackHorseKevin的博客 862

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

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

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

Z1888202的博客 290

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

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、付费专栏及课程。

余额充值