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

    1. 简单工厂模式

    概念:在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

    2. 策略模式

    例子:商城促销

    概念(Strategy):它定义了算法家族,分别封装起来, 让他们之间可以互相替换,此模式让算法的变化, 不会影响到使用算法的用户。

    解析:策略模式是一种定义一系列算法的方法,这些算法完成的是相同的工作,只是实现不同,它可以以相同的方式调用所有的散发, 减少了各种算法与使用算法累之间的耦合。

    Strategy为context定义了一系列的可供重用的算法或行为。继承有助于吸取这些算法中的公共方法, 优点是减化了单元测试,可以通过自己的接口单独测试。

    策略模式是用来封装算法的。

    3. 单一职责原则

    概念:就一个类而言, 他应该仅有一个引起它变化的原因

    4. 开放-封闭原则

    概念:软件实体(类,模块,函数等)应该可以扩展, 但是不可以修改。

    对于扩展是开放, 对于更改是封闭的。使得产品稳定。

    5. 依赖倒转原则(修电脑不能修收音机)

    要针对接口编程,不要对实现编程。

    A. 高层模块不应该依赖低层模块,两个都应该依赖抽象

    B. 抽象不应该依赖细节, 细节应该依赖抽象。

    6. 里氏代换原则

    一个软件实习如果使用的是一个父类的话,那么一定适用于其子类,而且它察觉不出父类对象和子类对象的区别。也就是说, 在软件里, 把父类都替换成他的子类, 程序的行为没有变化。

    概念:子类型必须能够替换掉他们的子类型。

    7. 装饰器模式

    (小菜扮靓)

    概念:动态地给一个对象添加一些额外的职责, 就添加功能来说,装饰模式比生成子类更为灵活。

    8 代理模式

    为他人做嫁衣

    概念:代理模式,为其他对象提供一种代理以控制对这个对象的访问。

    有一些例子

    A. 远程代理, 也就是为一个对象在不同的地址空间提供局部代表, 这样可以隐藏一个对象存在与不同地址空间的事实。

    B. 虚拟代理,是根据需求创建开销很大的对象, 通过它来存放实例化需要很长时间的真实对象。

    C. 安全代理,用来控制真实对象访问的权限

    D.智能代理,是指当调用真实的对象时, 代理处理另外一些事。

    9. 工厂方法模式

    定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法是一个类的实例化延迟到子类。

    interface IFactory { LeiFeng CreateFactory() }
    class UdergraduateFacoty:IFactory {
      public LeiFeng CreateLeiFeng() {
         return new Ugrate();   
     }  
    }
    class VoluteerFacory:IFactory {
        public LeiFeng CreateLeiFeng() {
           return new Voluteer();   
        } 
     }
    
    // client
    IFacotry factory = new UndergrateIFacotry();
    LeiFeng student = facotry.CreateLeiFeng();
    student.name();

     优点:

    遵守了关闭开放原则

    简单工厂的好处是工厂类包含了必要了逻辑判断,根据客服端的选择动态实例化相关的类。可是违背了开放-封闭原则

    10. 原型模式

    用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

    其实就是从一个对象再创建另外一个可定制的对象, 且不需要知道任何创建的细节。

    这里clone对象, 设及浅赋值和深复制

    浅赋值:被复制的对象的所有变量都含有与原来的对象相同的值, 而所有的对对象的引用都仍然指向原来的对象

    深复制:把引用的对象的变量指向复制过的对象, 而不是原有的被引用的对象。

  • 相关阅读:
    BZOJ1800 fly 飞行棋 [几何]
    Cf #434 Div.1 D Wizard's Tour [构造题]
    Last mile of the way [树形dp+重链剖分]
    World Of Our Own [Lucas+思维题]
    vue 初级小总结
    转-redux-saga
    【转】react-native开发混合App-github开源项目
    react中路由的跳转
    Lodash 浓缩
    jq的attr、prop和data区别
  • 原文地址:https://www.cnblogs.com/connie313/p/14730519.html
Copyright © 2011-2022 走看看