博客
关于我
Java设计模式小结
阅读量:725 次
发布时间:2019-03-17

本文共 3890 字,大约阅读时间需要 12 分钟。

hma设计模式的理解与应用

  • 面向对象的常见设计原则
  • 在面向对象编程中,理解并应用正确的设计原则是提高代码质量和维护性的基础。以下是常见的面向对象设计原则:

  • 单一原则(Affinity):每个类只拥有数据和行为,避免将数据和方法分散在多个类中。

  • 开闭原则(Open-Closed Principle,OCP):类的开闭是指类对扩展开放,对修改关闭。类可以扩展新的功能而不影响已有功能,同时可以禁止修改已有功能。

  • 里氏替换(Liskov Substitution Principle,LSP):像实体一样,用有另一性的对象替换原本的对象,从而保持同样的行为。

  • 依赖注入(Dependency Injection):通过设定事件来让对象间建立关系,而不是直接在代码中设定。

  • 接口 séparator(Interface Separation):将对象间的解耦,每个接口代表一种行为模式。

  • 设计模式概述与分类

  • 设计模式是软件开发中的常用经验法则,通过代码间接解决问题。当类出现共同的行为模式时,可以通过设计模式实现代码的复用和可维护。

    设计模式主要分为三类:

    A. 创建型模式(Creative Patterns):处理对象的创建问题,比如工厂模式。B. 结构型模式(Structural Patterns):处理类结构问题,比如Adapter、Composite等。C. 行为型模式(Behavioral Patterns):处理对象间协作问题,比如Strategy、Command等。

    在创建型模式中,简单工厂模式是一个经常使用的设计模式。它通过引入一个工厂类,为多个对象的创建提供统一的接口,从而隔离了对象的创建逻辑。

    简单工厂模式的实现方式:

    • 定义一个抽象工厂类,包含一个用于创建对象的静态方法。
    • 每个具体工厂类继承自抽象工厂类,并实现具体的创建方法。
    • 在使用工厂时,客户端只需要依靠工厂类来获取所需的对象类型。

    下面以动物工厂模式为例:

    // 抽象工厂public abstract class AnimalFactory {    public static Animal createAnimal(String type) {        if ("dog".equals(type)) {            return new Dog();        } else if ("cat".equals(type)) {            return new Cat();        } else {            return null;        }    }}// 具体工厂public class DogFactory extends AnimalFactory {    @Override    public Animal createAnimal(String type) {        return new Dog();    }}// 具体实现类public class Dog extends Animal {    @Override    public void eat() {        System.out.println("狗吃肉");    }}// 使用工厂public class AnimalDemo {    public static void main(String[] args) {        Dog dog = AnimalFactory.createAnimal("dog");        dog.eat();                Cat cat = AnimalFactory.createAnimal("cat");        cat.eat();                Animal a = AnimalFactory.createAnimal("dog");        System.out.println(a != null && a.eat());                try {            Animal other = AnimalFactory.createAnimal("pig");            if (other != null) {                other.eat();            } else {                System.out.println("未提供该动物类型");            }        } catch (NullPointerException e) {            System.out.println("未注册该类型");        }    }}

    工作方式:

  • 工厂方法模式
  • Factory 接口
  • 工厂实例的多态性
  • Sherlock Holmes理论。
  • 工厂方法模式的优点是主要关注业务的核心需求。每个具体工厂类只需要实现一个统一的接口方法,从而避免了直接在代码中使用 new 运算符,满足了开闭原则。

    1. 单例模式
    2. 单例模式确保一个应用程序中某个类只存在一个实例。

      a. 饿汉式:

      public class SinglonGrudy {    private static Singlon s = new Singlon();    public static Singlon getSinglon() {        return s;    }    private Singlon() {        //私有构造方法,不允许外部new创建    }}

      b. 懒汉式:

      public class SinglonLazyly {    private static Singlon s = null;    public static Singlon getSinglon() {        if (s == null) {            s = new Singlon();            return s;        }        return s;    }    private Singlon() {        //懒汉式先用的时候创建,这样可以节省内存    }}

      单例模式应用场景主要是资源受限的系统,比如数据库连接池、配置文件加载,以及确保内存中只有一个对象存在。

      1. 装饰模式
      2. 装饰模式通过给对象包装增添功能,使得系统具有更大的灵活性。常见应用包括文件读写、用户信息处理等场景。

        实现装饰模式通常会使用包装实例的方式,通过对方法调用进行增强:

        // 工具类:FileInputStream装饰public class FileStreamDecorate extends InputStream {    private InputStream in;    public FileInputStream Decorate(InputStream in) {        this.in = new some();        return in;    }    @Override    public int read(byte[] b, int offset, int len) {        //实现读取方式    }}// 使用场景FileInputStream fis = new FileStreamDecorate(new FileInputStream("file"));byte[] buffer = new byte[1024];int len = fis.read(buffer);// ...
        1. 模板模式
        2. 模板设计模式用于代码中的标准算法骨架,其中可以灵活替换具体的实现方式。其特点是:

          • 简化代码结构,方便管理和维护
          • 提供灵活的扩展方式
          • 适用于容易扩展的算法架构

          模板模式的主要特点是在定义算法时,代码中的占位符会被后续的具体实现替换。

          1. Runtime类
          2. Java Runtime类是应用运行时环境的重要组成部分,用于连接运行时环境。可以通过 Runtime 类调用系统命令,如重启或关机:

            import java.io.IOException;public class RuntimeDemo {    public static void main(String[] args) throws IOException {        Runtime r = Runtime.getRuntime();        r.exec("at 12:00 am shutdown -s");    }}
            • Runtime.getRuntime() 获取当前运行时。
            • exec("命令")执行外部命令,如 shutdown -s 关机。

            需要注意的是,调用外部命令需要注意权限问题。而且系统命令可能会导致不稳定,这种情况下应该谨慎使用。

            总结:

            • 面向对象设计原则是保证代码的高内聚低耦合,易于维护。
            • 设计模式是处理常见问题的高效方法,选择合适的模式能显著提升代码质量
            • 单例模式适用于资源有限的场景,需谨慎使用
            • 装饰模式和模板模式都是代码扩展的有效方式
            • Runtime 类能够真正或虚拟执行命令,是Java系统的一部分

    转载地址:http://swjez.baihongyu.com/

    你可能感兴趣的文章
    Mysql DBA 高级运维学习之路-DQL语句之select知识讲解
    查看>>
    mysql deadlock found when trying to get lock暴力解决
    查看>>
    MuseTalk如何生成高质量视频(使用技巧)
    查看>>
    mutiplemap 总结
    查看>>
    MySQL DELETE 表别名问题
    查看>>
    MySQL Error Handling in Stored Procedures---转载
    查看>>
    MVC 区域功能
    查看>>
    MySQL FEDERATED 提示
    查看>>
    mysql generic安装_MySQL 5.6 Generic Binary安装与配置_MySQL
    查看>>
    Mysql group by
    查看>>
    MySQL I 有福啦,窗口函数大大提高了取数的效率!
    查看>>
    mysql id自动增长 初始值 Mysql重置auto_increment初始值
    查看>>
    MySQL in 太多过慢的 3 种解决方案
    查看>>
    MySQL InnoDB 三大文件日志,看完秒懂
    查看>>
    Mysql InnoDB 数据更新导致锁表
    查看>>
    Mysql Innodb 锁机制
    查看>>
    MySQL InnoDB中意向锁的作用及原理探
    查看>>
    MySQL InnoDB事务隔离级别与锁机制深入解析
    查看>>
    Mysql InnoDB存储引擎 —— 数据页
    查看>>
    Mysql InnoDB存储引擎中的checkpoint技术
    查看>>