美文网首页
设计模式Note

设计模式Note

作者: 码磁 | 来源:发表于2017-03-22 17:36 被阅读4次

    一 、工场方法模式

    工厂类负责定义创建对象的接口,具体对象创建由继承工场类的具体类实现。
    优点:每个类有不同的责任,不影响现有代码,后期维护容易,增强扩展性。
    确定:写起来麻烦。

    举个栗子:
    /** 抽象汽车类,里面有驾驶的抽象方法**/
    public abstract class Car{
      public abstract void drive();
    }
    /** 工场类接口,抽象的创建汽车类方法**/
    public interface Factory{
      public abstract Car createCar();
    }
    /**具体的大众车类,重写抽象方法**/
    public class Das extends Car{
      public void drive(){
        System.out.println("DasAuto");
      }
    }
    /**大众工场类,实现工场的抽象方法,返回一个大众对象**/
    public class DasFactory implements Factory{
      public Car createCar(){
        return new Das();
      }
    }
    /**具体的宝马车类,重写抽象方法**/
    public calss BMW extends Car{
       public void drive(){
        System.out.println("BMW");
      }
      public void expensive(){
        System.out.println("我很贵");
      }
    }
    /**宝马工场类,实现工场的抽象方法,返回一个宝马对象**/
    public class BMWFactory implements Factory{
       public Car createCar(){
        return new BMW():
      }
    }
    public class TestDemo{
      public static void main(String[] args){
        //生产一个大众车
        Factory f = new DasFactory();
        Car car = f.createCar();
        car.driver();//DasAuto
        //生产一个大众车
        f = new BMWFactory();
        car = f.createCar();
        car.driver();//BMW
        car.expensive();//我很贵
      }
    }
    

    二、单例设计模式

    类在内存中只有一个对象,并且自动创建,并对外提供。

    1.饿汉模式

    /**思想是唯一的**/
    public class Idea{
      private Idea(){}
      private static Idea idea = new Idea();//自己构建一个对象,其他类不能直接访问
      public static Idea getIdea(){return idea;}//对外提供生成的对象
    }
    public class TestDemo{
      public static void main(String[] arg){
        Idea idea1 = Idea.getIdea();//得到对象
        Idea idea2 = Idea.getIdea();//得到对象
        System.out.println(idea1 == idea2);//输出为true
      }
    }
    

    1.懒汉模式

    public class Shit{
      private Shit(){}
      private static Shit s = null;
      public synchronized static Shit getShit(){
        if(s==null) s = new Shit();
        return s;
      }
    }
    
    public class TestDemo{
      public static void main(String[] arg){
        Shit s1 = Shit.getShit();
        Shit s2 = Shit.getShit();
        System.out.println(s1 == s2);//输出为true
      }
    }
    

    比较:

    饿汉模式是不会出现问题的单例模式
    懒汉模式有线程安全的问题(多线程环境,有共享数据,有多投语句操作共享数据)

    相关文章

      网友评论

          本文标题:设计模式Note

          本文链接:https://www.haomeiwen.com/subject/hhwonttx.html