Code Monkey home page Code Monkey logo

blog's People

Contributors

flowerboot avatar

blog's Issues

单例模式

https://www.adoger.com/Singleton/

为了实现Singleton模式,我们有不同的方法,但是所有方法都具有以下共同概念。

私有构造函数,用于限制该类从其他类的实例化。
同一类的私有静态变量,是该类的唯一实例。
返回类实例的公共静态方法,这是外部世界获取单例类实例的全局访问点。

静态初始化

在静态的初始化中,在加载类时会创建Singleton类的实例,这是创建Singleton类的最简单方法,但是它存在一个缺点,即使客户端应用程序可能不使用它也会创建该实例。

package com.journaldev.singleton;


public class EagerInitializedSingleton {

private static final EagerInitializedSingleton instance = new EagerInitializedSingleton();

//private constructor to avoid client applications to use constructor
private EagerInitializedSingleton(){}

public static EagerInitializedSingleton getInstance(){
    return instance;
} } ``` > 如果您的单例类没有使用大量资源,则可以使用这种方法。但是在大多数情况下,都是为文件系统,数据库连接等资源创建Singleton类的getInstance。除非客户端调用该方法,否则应避免实例化。另外,此方法不提供任何用于异常处理的选项。


静态块初始化
静态块初始化实现与热切初始化类似,不同的是,类的实例是在提供了异常处理选项的静态块中创建的。
package com.journaldev.singleton;

public class StaticBlockSingleton {

    private static StaticBlockSingleton instance;
    
    private StaticBlockSingleton(){}
    
    //static block initialization for exception handling
    static{
        try{
            instance = new StaticBlockSingleton();
        }catch(Exception e){
            throw new RuntimeException(

异常

https://www.adoger.com/effective-java75/

  1. 在细节消息中包含失败一捕获信息

  当程序由于未被捕获的异常而失败的时’候,系统会自动地打印出该异常的堆栈轨迹。在堆栈轨迹中包含该异常的字符串表示法 (string representation),即它的 toString 方法的调用结果。它通常包含该异常的类名,紧随其后的是细节消息 (detail message)。通常,这只是程序员或者网站可靠性工程师在调查软件失败原因时必须检查的信息。如果失败的情形不容易重现,要想获得更多的信息会非常困难,甚至是不可能的。因此,异常类型的 toString 方法应该尽可能多地返回有关失败原因的信息,这一点特别重要。换句话说,异常的字符串表示法应该捕获失败,以便于后续进行分析。

  为了捕获失败,异常的细节信息应该包含“对该异常有贡献”的所有参数和字段的值。 例如, IndexOutOfBoundsException 异常的细节消息应该包含下界、上界以及没有落在界内的下标值。该细节消息提供了许多关于失败的信息。这三个值中任何一个或者全部都有可能是错的。实际的下标值可能小于下界或等于上界(「越界错误」),或者它可能是个无效值,太小或太大。下界也有可能大于上界(严重违反内部约束条件的一种情况) 。每一种情形都代表了不同的问题,如果程序员知道应该去查找哪种错误,就可以极大地加速诊断过程。

  对安全敏感的信息有一条忠告。由于在诊断和修正软件问题的过程中,许多人都可以看见堆栈轨迹, 因此千万不要在细节消息中包含密码、密钥以及类似的信息!

  虽然在异常的细节消息中包含所有相关的数据是非常重要的,但是包含大量的描述信息往往没有什么意义。堆栈轨迹的用途是与源文件结合起来进行分析,它通常包含抛出该异常的确切文件和行数,以及堆校中所有其他方法调用所在的文件和行数。关于失败的冗长描述信息通常是不必要的,这些信息可以通过阅读源代码而获得。

  异常的细节消息不应该与“用户层次的错误消息”混为一谈,后者对于最终用户而言必须是可理解的。与用户层次的错误消息不同,异常的字符串表示法主要是让程序员或者网站可靠性工程师用来分析失败的原因。因此,信息的内容比可读性要重要得多。用户层次的错误消息经常被本地化,而异常的细节消息则几乎没有被本地化。

  为了确保在异常的细节消息中包含足够的失败- 捕捉信息, 一种办法是在异常的构造器而不是字符串细节消息中引人这些信息。然后,有了这些信息,只要把它们放到消息描述中,就可以自动产生细节消息。例如 IndexOutOfBoundsException 使用如下构造器代替 String 构造器:

/**

  • Constructs an IndexOutOfBoundsException.
  • @param lowerBound the lowest legal index value
  • @param upperBound the highest legal index value plus one
  • @param index the actual index value
    */
    public IndexOutOfBoundsException( int lowerBound, int upperBound,
    int index ) {
    // Generate a detail message that captures the failure
    super(String.format(

设计模式

https://www.adoger.com/Patterns/

《设计模式:可重用的面向对象软件的元素》一书中介绍了23种设计模式。

创建型模式(Creational Patterns):涉及对象创建的设计模式。
结构型模式(Structural Patterns):此类别中的设计模式涉及类结构,例如继承和组成。
行为型模式(Behavioral Patterns):这种类型的设计模式提供了更好的解决方案,以实现对象之间更好的交互,如何提供解耦以及将来轻松扩展的灵活性。

创建型设计模式

  模式名称
  描述


  单例模式(Singleton Pattern)
  该模式限制类的初始化,以确保只有一个类的实例可以被创建。


  工厂模式(Factory Pattern)
  工厂模式承担了从类到工厂类实例化对象的责任。(单维度)


  抽象工厂模式(Abstract Factory Pattern)
  允许我们为工厂类创建工厂。(多维度)


  建造者模式(Builder Pattern)
  逐步创建对象以及最终获取对象实例的方法。


  原型模式(Prototype Pattern)
  从另一个类似的实例创建一个新的对象实例,然后根据我们的要求进行修改。

结构型设计模式

  模式名称
  描述


  适配器模式(Adapter Pattern)
  在两个不相关的实体之间提供接口,以便它们可以一起工作。


  组合模式(Composite Pattern)
  当我们必须实现部分整体的层次结构时使用。例如,由其他零件(例如圆形,正方形,三角形等)制成的图表。


  代理模式(Proxy Pattern)
  为另一个对象提供代理或占位符,以控制对其的访问。


  享元模式(Flyweight Pattern)
  缓存和重用与不可变对象一起使用的对象实例。例如,字符串池。


  外观模式(Facade Pattern)
  在现有接口之上创建包装器接口以帮助客户端应用程序。


  桥接模式(Bridge)
  桥接设计模式用于将接口与实现分离,并从客户端程序隐藏实现细节。


  装饰器模式(Decorator Pattern)
  装饰器设计模式用于在运行时修改对象的功能。

行为型设计模式

  模式名称
  描述


  模板模式(Template Pattern)
  用于创建模板方法存根并将某些实现步骤推迟到子类。


  中介者模式(Mediator Pattern)
  用于在系统中不同对象之间提供集中式通信介质。


  责任链模式(Chain of Responsibility Pattern)
  用于实现软件设计中的松散耦合,其中将来自客户端的请求传递给对象链以对其进行处理。


  观察者模式(Observer Pattern)
  当您对对象的状态感兴趣并希望在发生任何更改时得到通知时很有用。


  策略模式(Strategy Pattern)
  当我们对一个特定任务有多种算法,并且客户端决定在运行时使用的实际实现时,将使用策略模式。


  命令模式(Command Pattern)
  命令模式用于在请求-响应模型中实现丢失耦合。


  状态模式(State Pattern)
  当对象根据其内部状态更改其行为时,将使用状态设计模式。


  访问者模式(Visitor Pattern)
  当我们必须对一组相似类型的对象执行操作时,将使用访问者模式。


  解释器模式(Interpreter Pattern)
  定义一种语言的语法表示形式,并提供解释器来处理这种语法。


  迭代器模式(Iterator Pattern
  用于提供遍历一组对象的标准方法。


  备忘录模式(Memento Pattern)
  当我们要保存对象的状态以便以后可以恢复时,将使用memento设计模式。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.