Javapattern用法详解

一、设计模式概述

设计模式是在软件开发中常见的一种解决问题的思想模式,可以被认为是对过去解决特定问题经验的提取和抽象。

总体而言,设计模式可以分为创建型、结构型和行为型三种类别。具有典型代表的常用模式有工厂模式、单例模式、适配器模式、装饰者模式、观察者模式等。

下面具体介绍设计模式的部分内容。

二、创建型模式

创建型模式的主要思想是将负责生成对象的过程进行抽象、封装,从而与具体类的实现过程进行解耦。

2.1 单例模式

单例模式意味着在一个应用程序中,某个类只有一个实例。单例模式具有以下特点:

  • 私有的构造函数
  • 视图防止用户直接new实例
  • 静态的实例变量保存类的唯一对象
  • 公有的静态方法(工厂方法)用于获取唯一对象
public class Singleton {
    private static Singleton instance = null;
    private Singleton(){

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

2.2 工厂模式

工厂模式是针对创建过程进行封装的一种常用模式。其主要思想是将对象的创建过程进行封装,使得其他部分能够通过调用工厂方法来获取对象。

下面是一个简单的工厂模式的实现(以Pizza为例):

public abstract class Pizza{
    public void prepare(){

    }
    public void bake(){

    }
    public void cut(){

    }
    public void box(){

    }
}

public class CheesePizza extends Pizza{
    public CheesePizza(){
        System.out.println("CheesePizza prepare!");
    }
}

public class PepperoniPizza extends Pizza{
    public PepperoniPizza(){
        System.out.println("PepperoniPizza prepare!");
    }
}

public class PizzaFactory{
    public Pizza createPizza(int type){
        Pizza pizza = null;
        if(type == 1){
            pizza = new CheesePizza();
        }else if(type == 2){
            pizza = new PepperoniPizza();
        }
        return pizza;
    }
}

三、结构型模式

结构型模式的主要思想是通过组合多个对象形成一个更复杂的结构,以解决复杂问题。

3.1 适配器模式

适配器模式是针对已有代码进行维护、重构时的一种常用模式,其主要思想是通过适配设计接口的方式将原来不兼容的接口进行兼容。

下面是一个简单的适配器模式实现(以电源适配器为例):

public interface PowerSource{
    public void charge();
}

public class Power220 implements PowerSource{
    public void charge(){
        System.out.println("220V");
    }
}

public class Power110Adapter implements PowerSource{
    private PowerSource power220;
    public Power110Adapter(PowerSource power220){
        this.power220 = power220;
    }
    public void charge(){
        power220.charge();
    }
}

public class Phone{
    private PowerSource powerSource;
    public Phone(PowerSource powerSource){
        this.powerSource = powerSource;
    }
    public void charge(){
        powerSource.charge();
    }
}

四、行为型模式

行为型模式的主要思想是将对象之间的交互显式化、解耦。其通过将算法、职责和行为进行封装,使得系统的变化不会对这些组件的协作方式进行影响。

4.1 观察者模式

观察者模式是对象之间的一种多对多关系,其主要思想是将主题与观察者解耦,使得它们能够独立地变化。

下面是一个简单的观察者模式实现:

import java.util.ArrayList;

interface Observer{
    void update(float temperature, float humidity, float pressure);
}

interface Subject{
    void registerObserver(Observer observer);
    void removeObserver(Observer observer);
    void notifyObservers();
}

class WeatherData implements Subject{
    private ArrayList observers;
    private float temperature;
    private float humidity;
    private float pressure;

    public WeatherData(){
        observers = new ArrayList();
    }

    public void registerObserver(Observer observer){
        observers.add(observer);
    }

    public void removeObserver(Observer observer){
        int i = observers.indexOf(observer);
        if(i >= 0){
            observers.remove(i);
        }
    }

    public void notifyObservers(){
        for(int i = 0; i < observers.size(); i++){
            Observer observer = (Observer) observers.get(i);
            observer.update(temperature, humidity, pressure);
        }
    }

    public void measurementsChanged(){
        notifyObservers();
    }

    public void setMeasurements(float temperature, float humidity, float pressure){
        this.temperature = temperature;
        this.humidity = humidity;
        this.pressure = pressure;
        measurementsChanged();
    }
}

class CurrentConditionsDisplay implements Observer{
    private float temperature;
    private float humidity;
    private Subject weatherData;

    public CurrentConditionsDisplay(Subject weatherData){
        this.weatherData = weatherData;
        weatherData.registerObserver(this);
    }

    public void update(float temperature, float humidity, float pressure){
        this.temperature = temperature;
        this.humidity = humidity;
        display();
    }

    public void display(){
        System.out.println("Current conditions: " + temperature + "F degrees and " + humidity + "% humidity");
    }
}

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/239403.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-12 12:16
下一篇 2024-12-12 12:16

相关推荐

  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • Python输入输出详解

    一、文件读写 Python中文件的读写操作是必不可少的基本技能之一。读写文件分别使用open()函数中的’r’和’w’参数,读取文件…

    编程 2025-04-25
  • Python安装OS库详解

    一、OS简介 OS库是Python标准库的一部分,它提供了跨平台的操作系统功能,使得Python可以进行文件操作、进程管理、环境变量读取等系统级操作。 OS库中包含了大量的文件和目…

    编程 2025-04-25
  • 详解eclipse设置

    一、安装与基础设置 1、下载eclipse并进行安装。 2、打开eclipse,选择对应的工作空间路径。 File -> Switch Workspace -> [选择…

    编程 2025-04-25
  • git config user.name的详解

    一、为什么要使用git config user.name? git是一个非常流行的分布式版本控制系统,很多程序员都会用到它。在使用git commit提交代码时,需要记录commi…

    编程 2025-04-25
  • nginx与apache应用开发详解

    一、概述 nginx和apache都是常见的web服务器。nginx是一个高性能的反向代理web服务器,将负载均衡和缓存集成在了一起,可以动静分离。apache是一个可扩展的web…

    编程 2025-04-25
  • Linux修改文件名命令详解

    在Linux系统中,修改文件名是一个很常见的操作。Linux提供了多种方式来修改文件名,这篇文章将介绍Linux修改文件名的详细操作。 一、mv命令 mv命令是Linux下的常用命…

    编程 2025-04-25
  • MPU6050工作原理详解

    一、什么是MPU6050 MPU6050是一种六轴惯性传感器,能够同时测量加速度和角速度。它由三个传感器组成:一个三轴加速度计和一个三轴陀螺仪。这个组合提供了非常精细的姿态解算,其…

    编程 2025-04-25
  • Java BigDecimal 精度详解

    一、基础概念 Java BigDecimal 是一个用于高精度计算的类。普通的 double 或 float 类型只能精确表示有限的数字,而对于需要高精度计算的场景,BigDeci…

    编程 2025-04-25

发表回复

登录后才能评论