zoukankan      html  css  js  c++  java
  • 设计模式

    设计模式是一套被反复使用,多数人知晓的,经过分类编目的,代码设计经验的总结。

    使用设计模式是为了可重用代码,让代码更容易的被他人理解,保证代码可靠性

    设计模式不是一种方法或技术,而是一种思想

    设计模式分类:

      创建型模式--对象的创建,6个:简单工厂模式,工厂方法模式,抽象工厂模式,建造者模式,原型模式,单例模式

      结构型模式--对象的组成(结构),7个:外观模式,适配器模式,代理模式,装饰模式,桥接模式,组合模式,享元模式

      行为型模式--对象的行为,10个:模板方法模式,观察者模式,状态模式,职责链模式,命令模式,访问者模式,策略模式,备忘录模式,迭代器模式,解释器模式

    public abstract class animal{}  public class dog extends animal{}   public class cat extends animal{}

    简单工厂模式:

      又叫静态工厂方法模式,定义一个决堤的工厂类负责创建一些类的实例

      优点:客户端不需要再负责对象的创建,从而明确了各个类的职责

      缺点:这个静态工厂类负责所有对象的创建,如果有新的对象添加,或者某些对象的创建方式不同,就需要不断修改工厂类,不利于后期维护

      public class AnimalFactory{

        private AnimalFactory(){}//构造方法私有  

        public static Animal createAnimal(String type){if("dog".equals(type){return new dog()} else if(....)}

      }

      Animal a = AnimalFactory.createAnimal("dog");

    工厂方法模式:

      解决简单工厂模式弊端

      工厂方法模式中,抽象工厂类负责定义创建对象的接口,具体对象的创建工作由继承抽象工厂的具体类实现

      优点:在简单工厂模式优点的基础上,如果有新对象增加,只需要增加一个具体的类和具体的工厂类即可,不影响已有代码,后期容易维护,增强系统的扩展性

      缺点:需要额外编码,增加工作量

      public interface Factory{}

      public class dogFactory implements Factory{}

      public class catFactory implements Factory{}

      Factory f = new dogFactory();

      Animal a = f.createAnimal();

    单例模式:

      确保类在内存中只有一个对象,该实例必须自动创建且对外提供

      优点:系统中只存在一个对象,可以节约系统资源,对于需要频繁创建和销毁的对象,单例模式可以提供系统性能

      缺点:没有抽象层,扩展很困难,职责过重,违背单一职责

      构造方法私有,成员位置提供自己创建一个本类对象,通过一个公共方法提供访问

      应用场景:任务管理器,回收站,网站计数器,数据库连接池,多线程的线程池,操作系统的文件系统

    代理模式:

      代理模式就是多一个代理类出来,替原对象进行一些操作

      应用场景:如有已有的方法在使用的时候需要对原有的方法进行改进,要么修改原有方法,但违反了“对扩展开发,对修改关闭”原则,要么采用代理模式,采用一个代理类调用原有的方法,且对产生的结果进行控制,有助于后期维护

    动态代理:

      在程序运行过程中产生一个代理对象,通过反射产生

      java.lang.reflect包下提供了一个Proxy静态类和一个InvocationHandler接口,使用这个类和接口可以生产动态代理对象,但JDK提供的代理只能针对接口做代理。

      cglib是更强大的代理

    装饰模式:

       装饰模式实际就是使用被装饰类的一个子类实例,然后使用这个子类,子类里重写父类方法,添加一些逻辑

      

  • 相关阅读:
    [Codeforces-div.1 809C] Find a car
    [Codeforces-div.1 55D] Beautiful numbers
    [BZOJ3598] [Scoi2014]方伯伯的商场之旅
    [BZOJ3131] [Sdoi2013]淘金
    [BZOJ2757] [SCOI2012]Blinker的仰慕者
    [BZOJ3329] Xorequ
    [POJ3744] Scout YYF I
    angular-file-upload 回显已上传的文件
    angular-file-upload 限制文件上传个数 获取已上传文件队列
    angular-file-upload 一款好用的文件上传组件,基本应用
  • 原文地址:https://www.cnblogs.com/zawjdbb/p/7436578.html
Copyright © 2011-2022 走看看