zoukankan      html  css  js  c++  java
  • 设计原则

    1、原则
      1)、单一职责 只一个引起变化
      2)、开闭 修改关闭、扩展开放=>接口、抽象类
      3)、里氏代换 子类对象替父类对象
        开闭补充,抽象化实现
      4)、依赖倒置=>依赖抽象接口
      5)、接口隔离=>依赖Min接口
      6)、合成/聚合复用=>已有对象成为新对象一部分
        聚合:整体<=部分 iphone<=os
        合成:整体=部分 ALL=part
        少继承
      7)、迪米特=>低耦低赖 A类-->友元/中介-->B类

    2、创建

      处理对象创建
      合适方式创建对象

      具体类封装、隐藏实例创建和结合方式

      对象创建型:处理对象创建;对象创建的一部分推迟到另一个对象
      类创建型:处理类创建;对象创建推迟到子类中

      2-1、简单工厂 SimplyFactory
        SimplyFactory=>typeA:productA type多复杂
      2-2、工厂方法 MethodFactory
        TypeAFactory=>Factory
        TypeAProduct=>Product....TypeZFactory复杂
      2-3、抽象工厂abstract
        TypeAFactory=>Factory
        TypeAProduct=>ProductA0....ProductAn A0..An复杂
      2-4、单列Singleton 扩展难 ==枚举
        饿汉synchronized第1次使用:空间大
        懒汉类加载:慢
        双锁volatile/synchronized:效率差
        内部类:多线程默认同步锁,同时延迟加载、线程安全
      2-5、原型clone
        对象A=new 类A, 对象B=对象A.clone 变化小
        浅:A.GetClass=B.GetClass;A<>B
        浅Cloneable:值
        深Serializable:引用


    3、结构
      处理类/对象组合
      模块之间耦合

      3-1、适配器(对象)
        适配器=>适配者(不兼容接口对象)
        Client=>Target=>Adapter=>Adaptee
      3-2、桥接
        抽象部分与实现部分分离
        继承关系=>弱关联(组合或聚合) 降耦 少类数量

        桥接口=》扩展全部;抽象类=>桥接口,扩展全部继承

      3-3、组合
        整体/部分
        容器(叶子)、容器(容器)对象类层次=>递归树形 

      3-4、装饰者
        对象动态加/减职责
        类A0、A1=>implements=>接口A{方法a}
        abstract Decorator{方法b,Set 接口A} implements=>接口A{方法a}
        注:+方法b
        类DecoratorA0、A1=>extends=>Decorator

      3-5、外观
        统一接口=>访问子系统群接口

        类WatchTvSwtichFacade{
          类A0,A1.....AN
          方法a0{A0.a0......AN.a0}
          方法a1{A0.a1......AN.a1}
        }

      3-6、享元
        相同或者相似对象大粒重用共享、变化小

        抽象享元类A{参:外状态}
        具体享元类B、C extends A
        享元工厂F{B、C}{单例模式、简单工厂}

        

      3-7代理
        对象替身
        抽象对象:目标、代理对象共同接口
               目标对象代理对象使用一样
        目标对象:代理对象所代表的目标对象
        代理对象:代理对象内含目标对象,操作目标对象;
             代理、目标对象相同接口,替代目标对象

        客户端调用:传给目标前后执行操作

        抽象对象 AbstractObject{方法A}
        目标对象 RealObject extends AbstractObject{方法A}
        代理对象 ProxyObject extends AbstractObject{RealObjec、方法A}


    4、行为
      类/对象=>交互、分配职责

      算法、对象间职责分配
      对象/类、之间通信方式
      控制流转移到对象间关系


      行为型类模式=>继承机制在类间分派行为
      行为型对象模式=>对象复合非继承

          

      4-1职责链
        请求者->处理者0{}.....->处理者n
        (处理者0.....n 动态增加/删除)

        请求者:类A
        abstract 处理B{ 处理{类A},后继者}
        处理B0 extends Leader B{}
        处理B1 extends Leader B{}
    .    .......................
        处理Bn extends Leader B{}

      4-2命令
        请求对象
        发出、执行命令

        Receiver: 接收者
        Command:abstract 命令A{Receiver,abstract方法A0{}}
        ConcreteCommand extends Command{Receiver,Override 方法A0{})
        Invoker: 调用者{Command,方法A0{}}

         

      4-3解释器
        环境类Context
        abstract Expression{Context}
        PlusExpression extends Expression{}
        MinusExpression extends Expression{}

      4-4迭代器
        顺序聚合对象元素,不暴露内部

      4-5中介对象
        中介对象{交互对象A0.....交互对象An},不太多

        abstract 中介A{相互A}
        中介代理 extends 中介A{同事a...同事B}

        abstract 相互A
        同事a extends 相互A{中介A}
        同事b extends 相互A{中介A}
        ................................

        

      4-6备忘录
        恢复状态,回到某个历史的状态
        Originator: 原发器 创建备忘录
        Memento: 备忘录
        Caretaker: 负责人 保存备忘录

        Caretaker.Mement1=Originator.Memento1
        Originator.Memento2
        Originator.Memento1=(Caretaker.Memento1)

      4-7 观察者
        发布-订阅(广播)
        观察者n:1主题

        interface 观察者I
        观察者1 implements 观察者I

        interface 主题I
        主题1 implements 主题I{观察者1......观察者n}

      

       4-8状态
        内部状态<=>行为
        interface IState
        State0 implements IState
        ........................
        Staten implements IState
        Context{State0,......Staten}
      4-9策略
        算法族<>多条件
        interface ISort
        Sort0 implements ISort
        ........................
        Sortn implements ISort
        ArraySort{Sort0,......Sortn}

      4-10模板方法
        算法
        代码复用子类实现
        AbstractClass 模板方法{方法0...方法n,TemplateMethod{方法0...方法n}}
        ConcreteClassA extends 模板方法{}
    .    ................................
        ConcreteClassZ extends 模板方法{}

      4-11访问者
      数据结构稳定
      操作变化
      interface I被访问{I访问{}}
      被访问a implements I被访问
      ..........................
      被访问n implements I被访问

      interface I访问
      访问1 implements I访问{被访问a......被访问n}
      访问2 implements I访问{被访问a......被访问n}
      ..........................
      访问n implements I访问{被访问a......被访问n}


    https://www.cnblogs.com/chenssy/archive/2013/05/24/3096161.html
    https://www.cnblogs.com/oukele/p/10105005.html

  • 相关阅读:
    python编写弹球游戏的实现代码
    Linux kernal
    ccc
    Ubuntu14.04 支持 exFat 格式操作
    Ubuntu 14.04 tar 打包系统安装到新机器
    Ubuntu14.04 dd命令克隆系统镜像安装到另一台机器上
    gzip 的使用
    gzip: stdin: unexpected end of file tar: Unexpected EOF in archive
    c++ 实现等待5s
    Ubuntu14.04 系统复制迁移到新的机器上
  • 原文地址:https://www.cnblogs.com/smallfa/p/11934015.html
Copyright © 2011-2022 走看看