java基础----常用设计模式

来源:互联网 发布:linux mysql 远程连接 编辑:程序博客网 时间:2024/05/17 01:00

单例设计模式

  • 饿汉式:线程安全,因为事先new Single()实例化对象了,不会有访问冲突发生,但是效率低
public class Single {    private static Single single = new Single();//实例私有化,只能通过下面方法获得    private Single(){//构造私有化    }    public static Single getInstance(){        return single;    }}
  • 懒汉式:效率高,但是线程不安全,假设两个异步线程同时进入getInstance方法,都会创建新的Single对象
public class Single {    private static Single single = null;    private Single(){    }    public static Single getInstance(){        if(single==null){            single = new Single();        }        return single;    }}
  • 懒汉式(即安全也效率高)
public class Single {    private static Single single = null;    private Single() {    }    public static Single getInstance() {        if (single == null) {            synchronized (Single.class) {//同步块,防止访问冲突                if (single == null) {                    single = new Single();                }            }        }        return single;    }}

PS:解释下为什么同步块里还要判断single 是否为空,假设两个线程AB都在执行到同步块那里去,然后A进去了,B在外面等着,如果没有判空的话,A创建了Single实例,出来后,B可以进去了,B又创建了Single实例,造成对象Single过多,所以要判空

工厂设计模式

简单工厂:由三部分组成

  • 具体工厂类:以具体工厂类为核心,定义返回抽象产品的方法,接受参数进行逻辑判定,判定用户想要哪个产品
public class CarFactory {    public static Car getCar(String Tag){        switch (Tag){            case "BMW":                return new BMW();            case "AuDi":                return new AuDi();        }        return null;    }}
  • 抽象产品类:产品的基类,降低耦合
public abstract class Car {    //具体逻辑方法}
  • 具体产品类:继承抽象产品,重写属于自己的方法
public class BMW extends Car {    //具体逻辑方法}public class AuDi extends Car {    //具体逻辑方法}

工厂方法:简单工厂的进一步改善,四部分组成

  • 抽象工厂:以抽象工厂为核心,定义返回抽象产品的方法
public abstract class CarFactory {    public abstract Car getCar();}
  • 具体工厂:继承抽象工厂,重写方法,返回具体的产品实例
public class BmwFactory extends CarFactory {    @Override    public Car getCar() {        return new BMW();    }}public class AuDiFactory extends CarFactory {    @Override    public Car getCar() {        return new AuDi();    }}
  • 抽象产品:产品的基类,降低耦合
public abstract class Car {    //具体逻辑方法}
  • 具体产品:继承抽象产品,重写属于自己的方法
public class BMW extends Car {    //具体逻辑方法}public class AuDi extends Car {    //具体逻辑方法}

Build模式

  • 创建静态内部类Builder,成员变量和外部类一样,Builder有一系列对变量赋值,最后有个Build(Builder build)方法,把build的变量赋给外部类的成员变量
  • 保证了实例化复杂对象的一致性和灵活性,也适合用在使用方法顺序不同会产生不同结果的场合
    简单例子:
0 0
原创粉丝点击