设计模式

懒汉:(线程安全)

public class Singleton{
    private volatile static Singleton singleton;
    private Singleton(){};
    public static synchronized Singleton getSingleton() {
        if(singleton == null) {
            singleton =    new Singleton();
        }
        return singleton;
    }
}

静态内部类

public class Singleton{
    private Singleton() {};
    private static class InSingleton{
        private static Singleton singleton = new Singleton();
    }
    public static Singleton getSingleton() {
        return InSingleton.singleton;
    }
}

枚举类:

private enum Singleton{
    INSTANCE;
}

双重校验:

public class Singleton{
    private volatile static Singleton singleton;
    private Singleton(){};
    public static Singleton getSingleton() {
        if(singleton == null) {
            synchronized(Singleton.class) {
                if(singleton == null) {
                    singleton = new Singleton();
                }
            }
        }
        return singleton;
    }
}

二、工厂模式

    简单工厂模式、工厂方法模式、抽象工厂模式。

1、简单工厂模式

    建立一个工厂类,通过传递不同的数据来通过工厂类创建不同的实现类返回给调用者调用这个实例的方法。

   抽象接口车间   :

      public   interface WorkShop{

         public abstract void method();

    }

    实现方法:

     public  class WorkShop1 implements WorkShop{

       @Override

      public void method(){

          System.out.println("第一车间生产");

      }  }

 

 public  class WorkShop2 implements WorkShop{

       @Override

      public void method(){

          System.out.println("第二车间生产");

      }  }

 public class  Factory{

    public WorkShop getWorkShop(String str){

    if(  "第一车间".equals(   str )  ){

       return new WorkShop1();

    } else if( "第二车间".equals(   str )){

   return new WorkShop2();

} } }

测试类:

public class Test{

      public void test(){

       Factory  factory = new Factory();

       WorkShop workShop =  factory.getWorkShop("第一车间");

        workShop.method();

       WorkShop workShop =  factory.getWorkShop("第二车间");

        workShop.method();

    }

}

2、工厂方法模式 -----新增加功能需要重写工厂类,不符合开闭原则

 重写工厂类

public class  Factory{

    public WorkShop getWorkShop1(){

       return new WorkShop1();

    }

  public  WorkShop2 getWorkShop2(){

  return new WorkShop2();   

  }

 }

测试类:

public class Test{

  public void test(){

   Factory factory = new Factory();

   WorkShop workShop1 =  factory.getWorkShop1();

    WorkShop workShop2 =  factory.getWorkShop2();

 }}

3、抽象工厂方法----抽象工厂方法新增加工厂类和车间类都不需要修改原来的类,符合开闭原则,新增功能只需要添加实现抽象工厂的新工厂类和实现抽象车间的新车间类。

   抽象车间

  public interface WorkShop{

    void method();

}

  车间实现类

 public class WorkShop1   implements  WorkShop {

   @Override

   public void method(){

     System.out.println(  "第一车间生产"  ); 

 }}

public class WorkShop2   implements  WorkShop {

   @Override

   public void method(){

     System.out.println(  "第一车间生产"  ); 

 }}

工厂抽象类

public  interface Factory{

   public WorkShop getWorkShop();

}

工厂实现类:

public class  Factory1  implements  Factory{

   @Override

    public WorkShop1 getWorkShop(){

    return   new WorkShop1();

 }}

public class  Factory2  implements   Factory{

      @Override 

      public WorkShop2 getWorkShop(){

       return  new WorkShop2();

  }}

测试类:

public class  Test{

  public void test(){

   Factory  factory1 = new Factory1();

   WorkShop   workShop1  =  factory1.getWorkShop();

  workShop1.method();

    Factory  factory2 = new Factory2();

    WorkShop  workShop2  =  factory2.getWorkShop();

      workShop2.method();

}}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值