zoukankan      html  css  js  c++  java
  • 设计模式

    1. 原则

    1. 单一职责原则
    单一职责原则,就一个类而言,应该仅有一个引起它变化的原因。
    解释:

    • 如果一个类职责过多,就等于把这些职责耦合在一起;
    • 软件设计正在要做的许多内容,就是发现职责并把那些职责分离;
    • 如果你能够想到多于一个的动机去改变一个类,那么这个类就具有多于一个职责,就应该考虑类的职责分离;

    2. 开放-封闭原则
    开放-封闭原则,是说软件实体(类、模块、函数等)应该可以扩展,但是不可修改。
    解释:

    • 这个原则有两个特征,对于扩展是开放的(Open for extension),对于更改是封闭的(Close for modification)。
      面对。
    • 面对需求,对程序的改动是通过增加新代码进行的,而不是更改现有的代码。

    3. 依赖倒转原则
    A. 高层模块不应该依赖低层模块,两个都应该依赖抽象;
    B. 抽象不应该依赖细节,细节应该依赖抽象。
    解释:

    • 要针对接口编程,不要对实现编程。
    • 依赖倒转其实可以说是面向对象设计的标志,用哪种语言来编写程序不重要,如果编写时考虑的都是对抽象编程而不是针对细节编程,即程序中所有的依赖关系都是终止于抽象类或者接口,那就是面向对象的设计,反之就是过程化设计了。

    4. 里氏代换原则
    子类型必须能够替换掉它们的父类型。
    解释:

    • 只有当子类可以替换掉父类,软件单位的功能不受到影响时,父类才能正在被复用,而子类也能够在父类的基础上增加新的行为。
      单一职责原则:高内聚,一个类只做它该做的事情;

    5. 接口隔离原则: 接口小而专,避免大而全;

    6. 迪米特法则:高内聚,低耦合;

    2. 设计模式

    1.创建型模式

    1. 抽象工厂模式:提供了一个创建一系列相关或相互依赖对象的接口,而无须指定他们具体的类
    2. 建造者模式:将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示
    3. 工厂方法模式:将类的实例化操作延迟到子类完成,即由子类来决定究竟应该实例化哪一个类
    4. 单例模式:确保在系统中某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例

    2.结构型模式

    1. 适配器模式:将一个接口转换成客户希望的另一个接口,从而使接口不兼容的哪些类可以一起工作
    2. 桥接模式:将抽象部分与他的实现部分分离,使他们都可以独立的进行变化
    3. 装饰模式:动态给一个对象增加一些额外的职责
    4. 代理模式:给某一个对象提供一个代理,并由代理对象控制对原对象的引用

    3.行为型模式

    1. 职责链模式:避免请求发送者和接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止
    2. 迭代器模式:提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示
    3. 策略模式:定义一系列算法,并将每一个算法封装在一个类中,并让它们可以相互替换,策略模式让算法独立于使用它的客户而变化
    4. 模板方法:定义一个操作中算法的骨架,而将这一些步骤延迟到子类中

    3.单例模式

    需要:
    (1)将构造方法私有化,使其不能在类的外部通过new关键字实例化该类对象。
    (2)在该类内部产生一个唯一的实例化对象,并且将其封装为private static类型。
    (3)定义一个静态方法返回这个唯一对象。

    实现一:立即加载 / “饿汉模式”
    “饿汉模式”的优缺点:
    优点:实现起来简单,没有多线程同步问题。
    缺点:当类SingletonTest被加载的时候,会初始化static的instance,静态变量被创建并分配内存空间,从这以后,这个static的instance对象便一直占着这段内存(即便你还没有用到这个实例),当类被卸载时,静态变量被摧毁,并释放所占有的内存,因此在某些特定条件下会耗费内存。

    实现二:延迟加载 / “懒汉模式”
    “懒汉模式”的优缺点:
    优点:实现起来比较简单,当类SingletonTest被加载的时候,静态变量static的instance未被创建并分配内存空间,当getInstance方法第一次被调用时,初始化instance变量,并分配内存,因此在某些特定条件下会节约了内存。
    缺点:在多线程环境中,这种实现方法是完全错误的,根本不能保证单例的状态。

    package singletion;

    /**
     * @author WangXiaoeZhe
     * @Date: Created in 2019/9/2 11:46
     * @description:
     */

    public class Singleton {
        /**
         * 饿汉式
         */

        private static Singleton instance = new Singleton();

       /* private Singleton(){}
        static Singleton getInstance() {
            return instance;
        }*/


        /**
         * 懒汉式
         */


        private static Singleton instence = null;

        private Singleton() {
        }

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

    }

    4.JDK中的设计模式

    1. 单例模式:RuntimeException
    2. 静态工厂:Integer a = Integer.valueOf(int or String)
    3. 迭代器模式:Collection.iterator()
    4. 适配器模式:InputStreamReader和outputStreamWriter
    5. 装饰器模式:Reader 和 bufferdReader
    6. 代理模式: SpringAOP
    7. 工厂模式:SpringIoc

    适配器模式:将一个接口适配到另一个接口,Java I/O中InputStreamReader将Reader类适配到InputStream,从而实现了字节流到字符流的准换。
    装饰者模式:保持原来的接口,增强原来有的功能。
    FileInputStream 实现了InputStream的所有接口,BufferedInputStreams继承自FileInputStream是具体的装饰器实现者,将InputStream读取的内容保存在内存中,而提高读取的性能。

  • 相关阅读:
    PHP和Redis实现在高并发下的抢购及秒杀功能示例详解
    quartz问题记录-missed their scheduled fire-time
    java(MyEclipse)创建webservice和测试webservice
    Redis wind7 安装
    spring boot新建项目报错总结
    spring boot新建项目启动报:Unregistering JMX-exposed beans on shutdown
    oracle安装过程和创建本地数据库
    正则表达式记录
    java continue与break区别
    Linux查看日志方法总结(1)
  • 原文地址:https://www.cnblogs.com/wuhen8866/p/11867596.html
Copyright © 2011-2022 走看看