首页 > 编程语言 >Java中的设计模式:面向对象设计的实用技巧

Java中的设计模式:面向对象设计的实用技巧

时间:2024-09-03 17:06:14浏览次数:9  
标签:实用技巧 Java int void 模式 class 设计模式 public

Java中的设计模式:面向对象设计的实用技巧

大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!

设计模式是软件工程中被广泛应用的一系列最佳实践,它们可以帮助解决常见的软件设计问题。在Java中,设计模式尤其重要,因为它们提供了一套标准的方法来创建灵活且可维护的代码。本文将探讨一些在Java中常用的设计模式及其实现。

单例模式

单例模式确保一个类只有一个实例,并提供一个全局访问点。

public class Singleton {
    private static Singleton instance;
    
    private Singleton() {}
    
    public static synchronized Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}

工厂方法模式

工厂方法模式定义了一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类。

public interface Factory {
    Product createProduct();
}

public class ConcreteFactory implements Factory {
    public Product createProduct() {
        return new ConcreteProduct();
    }
}

public class Product {
}

public class ConcreteProduct extends Product {
}

建造者模式

建造者模式允许你分步骤创建复杂对象,并允许只通过必要的步骤构建对象。

public class Builder {
    private Product product;

    public Builder() {
        this.product = new Product();
    }

    public Builder addPart(String part) {
        product.add(part);
        return this;
    }

    public Product build() {
        return product;
    }
}

public class Product {
    public void add(String part) {
        // 添加部件
    }
}

原型模式

原型模式通过复制现有对象来创建新对象,而不是通过新建一个实例。

import java.io.*;

public class Prototype implements Cloneable, Serializable {
    private String id;

    public Prototype(String id) {
        this.id = id;
    }

    public Prototype clone() {
        try {
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            ObjectOutputStream oos = new ObjectOutputStream(bos);
            oos.writeObject(this);
            ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
            ObjectInputStream ois = new ObjectInputStream(bis);
            return (Prototype) ois.readObject();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}

适配器模式

适配器模式允许不兼容的接口协同工作。

public interface Adapter {
    void request();
}

public class ConcreteAdapter implements Adapter {
    private LegacySystem legacySystem;

    public ConcreteAdapter(LegacySystem legacySystem) {
        this.legacySystem = legacySystem;
    }

    public void request() {
        legacySystem.specificRequest();
    }
}

public class LegacySystem {
    public void specificRequest() {
        // 遗留系统的请求
    }
}

装饰器模式

装饰器模式动态地给对象添加额外的功能。

public abstract class Component {
    public abstract void operate();
}

public class ConcreteComponent extends Component {
    public void operate() {
        // 基本操作
    }
}

public abstract class Decorator extends Component {
    protected Component component;

    public Decorator(Component component) {
        this.component = component;
    }

    public void operate() {
        component.operate();
    }
}

public class ConcreteDecoratorA extends Decorator {
    public ConcreteDecoratorA(Component component) {
        super(component);
    }

    public void operate() {
        super.operate();
        // 添加额外功能
    }
}

观察者模式

观察者模式定义了对象之间的一对多依赖关系,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。

import java.util.*;

public interface Observer {
    void update(String message);
}

public interface Subject {
    void register(Observer obj);
    void unregister(Observer obj);
    void notifyObservers();
}

public class ConcreteSubject implements Subject {
    private List<Observer> observers = new ArrayList<>();
    private String state;

    public void register(Observer obj) {
        observers.add(obj);
    }

    public void unregister(Observer obj) {
        observers.remove(obj);
    }

    public void notifyObservers() {
        for (Observer observer : observers) {
            observer.update(state);
        }
    }

    public void setState(String state) {
        this.state = state;
        notifyObservers();
    }
}

public class ConcreteObserver implements Observer {
    public void update(String message) {
        // 更新逻辑
    }
}

策略模式

策略模式定义了一系列算法,并将每个算法封装起来让它们可以互换。

public interface Strategy {
    int doOperation(int num1, int num2);
}

public class OperationAdd implements Strategy {
    public int doOperation(int num1, int num2) {
        return num1 + num2;
    }
}

public class Context {
    private Strategy strategy;

    public Context(Strategy strategy) {
        this.strategy = strategy;
    }

    public int executeStrategy(int num1, int num2) {
        return strategy.doOperation(num1, num2);
    }
}

总结

设计模式是面向对象设计中的重要工具,它们提供了经过验证的解决方案来解决常见的设计问题。在Java中,单例模式、工厂方法模式、建造者模式、原型模式、适配器模式、装饰器模式、观察者模式和策略模式等都是常用的设计模式。通过合理地使用这些模式,可以提高代码的可重用性、可维护性和灵活性。

本文著作权归聚娃科技微赚淘客系统开发者团队,转载请注明出处!

标签:实用技巧,Java,int,void,模式,class,设计模式,public
From: https://www.cnblogs.com/szk123456/p/18394941

相关文章

  • Java基础-学习笔记16
    16线程(基础)1.相关概念进程:进程是程序的一次执行过程,或是正在运行的一个程序。是多态过程,有它自身的产生、存在和消亡的过程。(比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存看见。当我们使用迅雷,又启动了一个进程,操作系统将为迅雷分配新的内存空间。进程一旦中......
  • Java数据库连接池的优化与配置
    Java数据库连接池的优化与配置大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!数据库连接池是现代Java应用中不可或缺的一部分,它允许多个用户共享一个固定数量的数据库连接,显著提高了应用程序的性能和可扩展性。本文将探讨如何优化和配置Java数据库连......
  • java+springboot权限的设计(用户、角色、权限)和前端如何渲染用户所对应的权限菜单
    记得当时在学校的时候,觉得这个实现起来真的超级困难,想想就头大,毫无头绪,即便那时候去查资料看了很多大佬写的文章,看的时候感觉恍然大悟,直拍大腿,但是当我想要动手自己去做的时候,又不知道从哪开始切入,于是一直没有动手去做,直到最近在实习的时候,给了我这个任务,当我带着恐惧去自......
  • javascript变量
    定义变量var声明变量的关键字vara;vara=10;varb=20.8;varc="demo";定义时不区分数据类型,但是使用时存在类型的区分变量类型:①基本类型:(零零散散不可拆分)数字类型1010.6字符串"aa"'aaa'布尔类型真/假true/falseundefined类型即声明变量但不进行赋......
  • Java基础 韩顺平老师的 泛型 的部分笔记
    553,泛型引入packagecom.hspedu.list_;importjava.util.*;importjava.util.concurrent.CompletionService;@SuppressWarnings({"all"})publicclassMap_{publicstaticvoidmain(String[]args){//使用传统的方法来解决ArrayListarrayLis......
  • Java微服务架构设计:构建可扩展的服务
    Java微服务架构设计:构建可扩展的服务大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!微服务架构是一种将应用程序作为一套小服务开发的方法,每个服务运行在其独立的进程中,并通过轻量级的通信机制(通常是HTTPRESTfulAPI)进行交互。在Java中,构建微服务通......
  • Java中的依赖注入:Spring框架核心概念解析
    Java中的依赖注入:Spring框架核心概念解析大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在Java企业级应用开发中,Spring框架已成为事实上的标准。Spring的核心之一是依赖注入(DependencyInjection,DI),它是一种实现控制反转(InversionofControl,IoC)......
  • idea java开发 如何引入 一个 第三方 文件夹SDK源码,是SDK源码 不是 jar包
    在IntelliJIDEA中引入第三方文件夹作为SDK源码,而不是以jar包的形式,可以通过以下步骤来实现:打开项目:启动IntelliJIDEA,并打开你的项目。打开项目结构设置:点击菜单栏中的File->ProjectStructure...或使用快捷键Ctrl+Alt+Shift+S打开项目结构设置窗口。添加......
  • Java服务端数据库连接:连接池的资源优化
    Java服务端数据库连接:连接池的资源优化大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在Java服务端开发中,数据库连接池是提高数据库操作效率的关键技术之一。然而,随着系统负载的增加,如何优化连接池的资源使用成为了一个重要的问题。本文将探讨如何通......
  • Java服务端数据库连接:连接池的故障恢复策略
    Java服务端数据库连接:连接池的故障恢复策略大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在Java服务端应用中,数据库连接池是核心组件之一,它管理着数据库连接的生命周期。然而,数据库连接可能会因为多种原因(如网络问题、数据库服务重启等)而出现故障。......