zoukankan      html  css  js  c++  java
  • 程序设计一些原则及单例模式示例

    1.面向接口编程(这是Java编程里公认的第一原则)
    2.优先使用对象组合而非类继承
    3.分层(表现层,逻辑层,数据层)
    表现层:展示数据,人机交互,收集参数调用逻辑层
    逻辑层:进行数据逻辑校验,逻辑判断,实现业务功能,处理相关功能,处理 后续流程,组织数据返回给表现层
    数据层功能:实现数据持久化,实现对象和持久化数据的双向映射。

    层间交互的基本原则:
    1.表现层调用逻辑层,逻辑层调用数据层,不可以反过来
    2.层间交互也应该通过接口进行调用,以确保各层的实现独立变化。

    基本原则2:
    1.开闭原则:
    就是对新增开放,对修改关闭。应尽量做到不用修改模块的源代码,就能更改模块的行为
    2.依赖性倒置原则
    就是依赖抽象而不是依赖具体的实现
    3.接口隔离原则
    就是不要使用通用的接口,而是为不同的用户使用不同的接口
    4.替换原则
    就是子类应当可以替换父类并出现在父类能够出现的任何地主。

    类设计原则:
    1.类要单一:加强内聚,松散耦合,好的封装,类的粒度要合理
    实现类不能依赖它的使用类,应考虑灵活性,也就是可配置,可维护,
    考虑性能,考虑可伸缩性,可扩展性,合理的复用。考虑接口和抽象类的使用。(既要约束子类的行为又要为子类提供公共的功能时使用抽象类)尽量减少类与协作类的交互次数和交互信息的量。父类不应知道子类的信息,子类必须知道父类的信息。更多使用类的组合,而不是继承。访问对象必须使用接口,不能绕过接口。

    ---------------------------------------------------------------------------
    设计模式:
    描述一个设计模式,通常包含以下4个部分:
    1,模式名称,就是为每个设计模式取个名字,便于交流和使用
    2,环境和问题:描述在什么场景下,出现什么样的特定的问题
    3,解决方案:描述如何解决这个问题
    4,效果:描述模式可能带来的问题,或者使用中需要权衡的问题

    单例模式:
    场景和问题:在Java程序中,如何确保在运行期间,某个类只有一个实例
    本质:控制实例数目
    体现的一些思想:延迟装载,缓存

     1 package singleton;
     2 
     3 public class SingleClass {
     4     //确保多线程模式下的安全,以空间换时间,缓存了一个实例
     5     private static SingleClass instance = new SingleClass();
     6     //确保外部不能调用构造方法
     7     private SingleClass(){}
     8     //提供单一实例
     9     public static SingleClass getInstance(){
    10         return instance;
    11     }
    12 
    13 }
    14 
    15 //此种方式可能会有多线程问题,但是以时间换取了空间,延迟装载,在不会出现多线程的问题环境中应该优先使用
    16 class SingleClass2{
    17     private static SingleClass2 instance;
    18     
    19     private SingleClass2(){}
    20     
    21     public static SingleClass2 getInstance(){
    22         if(instance == null){
    23             instance = new SingleClass2();
    24         }
    25         return instance;
    26     }
    27 }

    工厂方法:

    场景和问题:面向接口编程中,如何得到接口呢?
    解决方案:使用工厂方法
    本质: 负责选择接口的实现,返回给客户接口

  • 相关阅读:
    第3关:求三位数各位数字的和
    第4关:求三角形的面积
    第6关:输出杨辉三角
    最短路 模板 【bellman-ford,dijkstra,floyd-warshall】
    hdu 1874 畅通工程 【spfa and dijkstra实现】
    01背包问题 总结关于为什么01背包优化成1维数组后,内层循环是逆序的?
    Stein算法求最大公约数
    hdu 1576 A/B 【扩展欧几里德】
    树状数组之 ——区间更新,单点查询;区间更新,区间查询;
    差分数组
  • 原文地址:https://www.cnblogs.com/wn398/p/3138973.html
Copyright © 2011-2022 走看看