• 设计模式


    常见的设计模式

    一、单例模式 singleton

     保证该类只可能有一个实例。通常单例模式用于对该实例共享。

     或者因为该类实例较为消耗资源,一个实例足以满足应用等情况下使用。

     单例步骤:

     1:私有化构造方法

     2:定义静态的获取当前类型实例的方法

     3:定义私有的静态的当前类型实例并初始化

    public class Singleton {

                         private Singleton(){}

                         private static final Singleton singleton=new Singleton();

                         public static Singleton getSingleton(){

                                return singleton;

                         }

    }

    public static void main(String[] args) {

                                Singleton s1=Singleton.getSingleton();

                                Singleton s2=Singleton.getSingleton();

                                System.out.println(s1==s2);//true

                 }

    二、模板模式

      定义某一个业务的流程骨架,而将不同的细节操作留给子类去实现。

      public abstract class Person {

           打招呼,自我介绍

           public void sayHello(){

                  //相同的部分定义在这里

                  System.out.println("大家好!");

                  //细节的不同延迟到子类去实现

                  System.out.println(getInfo());

                  System.out.println("再见!");

           }

           public abstract String getInfo();

    }

    //学生

    class Student extends Person{

           public String getInfo() {

                  return "我是一名学生,我上了12年小学!";

           }

    }

    class Teacher extends Person{

           public String getInfo() {

                  return "我是一名老师,我也不知道我会什么!";

           }

    }

    Person student = new Student();

    Person teacher = new Teacher();

    student.sayHello();

    System.out.println();

    teacher.sayHello();

    三、工厂模式

               "工厂"是一种设计模式。

    所谓设计模式,是设计人员在面对一些相似的问题提出的一套通用的解决方案,为了方便交流,给这些解决方案命名,比如"工厂“就是一个设计模式。

                 工厂模式的核心思想是:工厂为调用者提供符合接口要求的对象(产品),调用者不

    用了解对象的创建的细节。

    案例

    有一个接口:

    public interface IHello {

                         public void sayHello();

    }

    有两个实现类

    public class HelloEnglish implements IHello{

           public void sayHello() {

                  System.out.println("hello");   

           }    

    }

    public class HelloChinese implements IHello{

           public void sayHello() {

                  System.out.println("吃了吗?");

           }

    }

    业务要求:

    工厂类根据我传入的接口类型,返回接口对应的实现类,可以把实现类信息写在配置信息里。

    dao.properties

    #IHello=day03.HelloChinese

    IHello=day03.HelloEnglish

    如果要把一个接口对应的实现类换一个,在配置文件里修改即可,不需要修改java代码

    工厂类:

    public class Factory {

           private static Properties props=new Properties();

           static{

                  try {

                         props.load(Factory.class.getClassLoader().

    getResourceAsStream("day03/config.properties"));

                  } catch (IOException e) {

                         e.printStackTrace();

                  }

           }

           public static Object getInstance(String type){

                  Object obj=null;

                  //根据接口名称(type)找到类名

                  String className=props.getProperty(type);

                  System.out.println(className);

                  //根据类名创建实例,利用反射

                  try {

                         //加载类文件

                         Class c=Class.forName(className);

                         //依据方法区中的class文件,创建该类的实例

                         obj=c.newInstance();

                  } catch (ClassNotFoundException e) {

                         System.out.println("找不到类文件");

                         e.printStackTrace();

                  } catch (InstantiationException e) {

                         e.printStackTrace();

                  } catch (IllegalAccessException e) {

                         e.printStackTrace();

                  }

                  return obj;

           }

    }

    测试类:

           @Test

           public void testFactory() throws SQLException{

    //根据接口类型返回接口对应的实现类

                  IHello hello=(IHello) Factory.getInstance("IHello");

                  hello.sayHello();

           }

  • 相关阅读:
    C# 委托/Func() 中 GetInvocationList() 方法的使用 | 接收委托多个返回值
    蒋廷黻著《中国近代史》-中国近代屈辱史读后感
    ASP.NET Core 上传多文件 超简单教程
    Python
    Python
    Python
    Python
    Python
    Python
    Python
  • 原文地址:https://www.cnblogs.com/qin-derella/p/6669634.html
Copyright © 2020-2023  润新知