设计模式

2019-08-26  本文已影响0人  LeoFranz
面向对象的普适设计原则
设计模式分类
单个设计模式介绍

简单工厂模式

public class FoodFactory {

    private FoodFactory() {}

    public static Food creatFood(String name) {
        if(name != null && name.length() > 0) {
            if (name.equalsIgnoreCase("noodles")) {
                return new Noodles();
            } else if (name.equalsIgnoreCase("Chicken")) {
                return new Chicken();
            }
        }
        return null;
    }
}
public static void main(String[] args) {
        Food food1 = FoodFactory.creatFood("noodles");
        Food food2 = FoodFactory.creatFood("Chicken");
        food1.smell();
        food2.smell();
    }

又叫静态工厂方法模式,它定义一个具体的工厂类负责创建一些类的实例。客户端不需要在负责对象的创建,从而明确了各个类的职责。这个静态工厂类负责所有对象的创建,如果有新的对象增加,或者某些对象的创建方式不同,就需要不断的修改工厂类,不利于后期的维护。

工厂方法模式

public interface AnimalFactory {
    public abstract Animal creatAnimal();
}
public class DogFactory implements AnimalFactory {
    @Override
    public Animal creatAnimal() {
        return new Dog();
    }
}
public static void main(String[] args) {
        DogFactory dogFactory = new DogFactory();
        Animal animal = dogFactory.creatAnimal();
        animal.eat();
        CatFactory catFactory = new CatFactory();
        Animal animal1 = catFactory.creatAnimal();
        animal1.eat();
}

工厂方法模式中抽象工厂类负责定义创建对象的接口,具体对象的创建工作由继承抽象工厂的具体类实现。
客户端不需要在负责对象的创建,从而明确了各个类的职责,如果有新的对象增加,只需要增加一个具体的类和具体的工厂类即可,不影响已有的代码,后期维护容易,增强了系统的扩展性。
缺点就是需要额外的编写代码,增加了工作量。

单例模式

//饿汉式
public class Student {
    private Student(){}
    private static Student student = new Student();

    public static Student getStudent() {
        return student;
    }

}
//懒汉式
public class Student {
    private Student(){}
    private static Student student = null;

    public static Student getStudent() {
        if(student == null) {
            student = new Student();
        }
        return student;
    }

}
public static void main(String[] args) {
        Student student1 = Student.getStudent();
        Student student2 = Student.getStudent();
        System.out.println(student1 == student2);
    }

单例模式就是要确保类在内存中只有一个对象,该实例必须自动创建,并且对外提供。
在系统内存中只存在一个对象,因此可以节约系统资源,对于一些需要频繁创建和销毁的对象单例模式无疑可以提高系统的性能。
缺陷在于没有抽象层,因此扩展很难;职责过重,在一定程序上违背了单一职责。
构建单例模式的要点在于不能让外界直接创建实例。
两种单例模式对比
饿汉式:使用不会有什么问题(除非类加载时系统开销特别大)。
懒汉式:体现懒加载思想。但会有线程安全问题,解决方式是方法上加同步锁。
代码运用实例:Runtime类
每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。可以通过 getRuntime 方法获取当前运行时。应用程序不能创建自己的 Runtime 类实例。
有个常用的方法:exec() 在单独的进程中执行指定的字符串命令。

Runtime r = Runtime.getRuntime();
    r.exec("winmine");扫雷
    r.exec("notepad");记事本
    r.exec("calc");计算器
    r.exec("shutdown -s -t 10000"); 10000秒后关机
    r.exec("shutdown -a");取消关机命令。
上一篇 下一篇

猜你喜欢

热点阅读