JAVA面向对象设计

一、设计原则

1.单一职责原则:所有的对象都应该有单一的职责,它提供的所有的服务也都仅围绕着这个职责。

2.开闭原则:(1)对于扩展是开放的(Open for extension):模块的行为可以扩展,当应用的需求改变时,可以对模块进行扩展,以满足新的需求。
      (2)对于更改是封闭的(Closed for modification):对模块行为扩展时,不必改动模块的源代码或二进制代码。

3.里式替换原则:里氏替换原则常用来检查两个类是否为继承关系。在符合里氏替换原则的继承关系中,使用父类代码的地方,用子类代码替换后,能够正确的执行动作处理。

4.依赖倒转原则:是指将两个模块之间的依赖关系倒置为依赖抽象类或接口。(在三层架构的设计中,设计的接口,就体现了这一原则)

具体有两层含义:(1)高层模块不应该依赖于低层模块,二者都应该依赖于抽象;
        (2)抽象不应该依赖于细节,细节应该依赖于抽象。

5.组合/聚合复用原则:是指要尽量使用组合/聚合而非继承来达到复用目的。另一种解释是在一个新的对象中使用一些已有的对象,使之成为新对象的一部分;新的对象通过向这些对象委托功能达到复用这些对象的目的。

6.接口隔离原则:(1)接口的设计应该遵循最小接口原则,不要把用户不使用的方法塞进同一个接口里。

        (2)如果一个接口A继承另一个接口B,则接口A相当于继承了接口B的方法,那么继承了接口B后的接口A也应该遵循上述原则:不应该包含用户不使用的方法。反之,则说明接口A被B给污染了,应该重新设计它们的关系。

7.迪米特法则:一个软件实体应当尽可能少的与其他实体发生相互作用。

二:模式

设计模式:

  1.创建型设计模式:

    (1)工厂模式:分为简单工厂模式、工厂方法模式、抽象工厂模式。

      A.简单工厂模式:(给了用户一个选择,要那个就那个,那个是怎样弄出来的与用户无关(分装))

public class Factory{
  public static Sample creator(int which){
 //getClass 产生Sample 一般可使用动态类装载装入类。  

    if (which==1)  

      return new SampleA();  

    else if (which==2)   

      return new SampleB();
  }
}
//Sample sampleA=Factory.creator(1);
//不涉及到Sample的具体子类,达到封装效果,也就减少错误修改的机会

    B.工厂方法:

    C.抽象工厂:

  2.单例模式:

  第一种:(延迟加载,在真正需要用到对象的时,才产生;但为保证线程的安全,加了同步,使得不支持高并发) 

public class SingleTest(){

  private static SingleTest instance;

  private SingleTest(){

  }

  public synchronized static SingleTest getInstance(){

    if(null == instance){

      instance = new SingleTest();

    }

    return instance;

  }

}

第二种:(预加载方式产生,不管是否使用,都在内存中存在了,线程绝对安全) 

public class SingleTest(){

  private static SingleTest instance = new SingleTest();

  private SingleTest(){

  }

  public static SingleTest getInstance(){

    return instance;

  }

}

第三种:(添加了同步锁,既是延迟加载,又支持高并发,而且线程安全-------不过在JDK1.7以前不支持)

public class SingleTest(){

  private static SingleTest instance = null;

  private SingleTest(){

  }

  public  static SingleTest getInstance(){

    if(null == instance){

      synchronized(singleTest.class){

        if(null == instance){

          instance = new SingleTest();

        }

      }

    }

    return instance;

  }

}

  3.原型模式:(深克隆与浅克隆---对于可以进行克隆操作的类需要实现Cloneable接口,与一个对象要可序列化需实现Serializable接口一样)

   A.浅克隆:(克隆方法clone(),只克隆了一层对象,对于下层的对象没有进行克隆。即:如果被克隆的这个对象中有引用数据类型,克隆后的对象所指向的还是之前的引用数据类型,这会导致一改则都改的效果)

public class AbstractSpoon implements Cloneable{   

  String spoonName;  

  public void setSpoonName(String spoonName) {

    this.spoonName = spoonName;

  }  

  public String getSpoonName() {

    return this.spoonName;

  }  

  public Object clone() {   

    Object object = null;

    try {

      object = super.clone();

    } catch (CloneNotSupportedException exception) {

      System.err.println("AbstractSpoon is not Cloneable");

    }

    return object;

  }

}

    B.深克隆:(在对象的实现克隆的方法中,将对象本身序列化到一个字节数组中,在将这个对象反序列化回来---------这样就将整个对象都进行了克隆)

public Man deepClone(){
try {
ByteArrayOutputStream bo = new ByteArrayOutputStream();
ObjectOutputStream outObj = new ObjectOutputStream(bo);
outObj.writeObject(this);

ByteArrayInputStream bi = new ByteArrayInputStream(bo.toByteArray());
ObjectInputStream outIn = new ObjectInputStream(bi);
Man m = (Man)outIn.readObject();

return m;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

 

时间: 2024-07-29 03:24:32

JAVA面向对象设计的相关文章

Java面向对象设计原则

面向对象设计原则是OOPS(Object-Oriented Programming System,面向对象的程序设计系统)编程的核心,但大多数Java程序员追逐像Singleton.Decorator.Observer这样的设计模式,而不重视面向对象的分析和设计.甚至还有经验丰富的Java程序员没有听说过OOPS和SOLID设计原则,他们根本不知道设计原则的好处,也不知道如何依照这些原则来进行编程. 众所周知,Java编程最基本的原则就是要追求高内聚和低耦合的解决方案和代码模块设计.查看Apac

Java面向对象设计的六大原则

这是设计模式系列开篇的第一篇文章.也是我学习设计模式过程中的总结.这篇文章主要讲的是面向对象设计中,我们应该遵循的六大原则.只有掌握了这些原则,我们才能更好的理解设计模式.我们接下来要介绍以下6个内容. 单一职责原则——SRP 开闭原则——OCP 里式替换原则——LSP 依赖倒置原则——DIP 接口隔离原则——ISP 迪米特原则——LOD 单一职责原则 单一职责原则的定义是就一个类而言,应该仅有一个引起他变化的原因.也就是说一个类应该只负责一件事情.如果一个类负责了方法M1,方法M2两个不同的事

Java面向对象设计题1

有感于很多新人都不知道怎么学习软件开发,个人感觉还是因为练习做的太少,软件开发知识想看懂太难了,必须是边读资料边动手练习.莫说是新人,Java老人研究新技术的时候也是边读资料边练习.因此整理和编排了一系列的练习题,原发表于技术帮网站,但毕竟博客园更大,特转摘于此,希望对新人学习有帮助. 1 请设计部门和人员 定义部门类: 属性:部门名称. 定义人员类: 属性:姓名.工号.所属部门.电话. 方法: 构造方法(所属部门); 显示人员的详细信息:(张三(U0001) 计划部 电话:1392645***

java.面向对象设计的核心——类和对象

面向对象的三条学习主线 java类及类的成员 属性.方法.构造器:代码块.内部类 面向对象的三大特征 封装性.继承性.多态性(抽象性) 其他关键字 this.super.static.final.abstract.interface.package.import等 面向过程(POP)与面向对象(OOP) 二者都是一种思想,面向对象是相对于面向过程而言.面向过程,强调的是功能行为,以函数为最小单位,考虑怎么做.面向对象,将功能封装进对象,强调具备功能的对象,以类/对象为最小单位,考虑谁来做. 面向

java面向对象设计的原则

一.针对java类的6大设计原则 1.单一职责原则(Single Responsibility Principle,SRP) 即:对一个类而言,有且仅有一个引起它变化的原因.否则的话就应该把这个类进行拆分.在设计时让一个类只负责一种类型的责任. 单一职责原则的核心就是控制类的粒度大小.将对象解耦.提高内聚性.如果遵循单一职责原则将有以下优点: 降低类的复杂度.一个类只负责一项职责,其逻辑肯定要比负责多项职责简单得多. 提高类的可读性.复杂性降低,其可读性自然会提高. 提高系统的可维护性.可读性提

Java面向对象设计主要有三大特征:封装性、继承性和多态性

一  封装性   1.1  概念:它是将类的一些敏感信息隐藏在类的类部,不让外界直接访问到,但是可以通过getter/setter方法间接访问. 1.2  目的:我们可以并且有可能在方法中,添加自己的限制,保证数据的有效性:从某种程度上说,封装也提高了代码的健壮性.安全性. 1.3  实现步骤:所有的成员变量全部私有化,格式 :private   数据类型  变量名  ,提供访问成员变量的getter/setter方法. 二  继承性   2.1  概念:子类通过一种方式来接受父类所有的公有的,

《Java面向对象设计》

第一章 面向对象软件工程与UML p理解为什么需要软件工程 p掌握软件工程的基本概念 p掌握软件生命周期各个阶段的主要任务 p了解流行软件开发过程 p了解软件过程模型 p了解面向对象软件工程的方法与过程 p了解UML各种图形 p掌握UML类图 软件危机 软件工程的定义 软件工程的内容 软件工程三要素 软件开发过程 软件过程模型之瀑布模型 喷泉模型 统一建模语言UML 在UML类图中描述具体类 在UML类图中描述抽象类 在UML类图中描述接口 实现关系 使用类图表示关系 泛化关系 关联关系 依赖关

JAVA面向对象设计中类关系

类之间的关系种类: Generalization(泛化),Dependency(依赖关系).Association(关联关系).Aggregation(聚合关系).Composition(组合关系).   Generalization(泛化)表现为继承或实现关系(is a).具体形式为类与类之间的继承关系,接口与接口之间的继承关系,类对接口的实现关系. 继承.实现关系是比较明确的,另外几种依赖.关联关系要结合语义(具体上下文环境)来理解. 依赖(Dependency)关系是类与类之间的联接.依赖

Java面向对象设计题2

有感于很多新人都不知道怎么学习软件开发,个人感觉还是因为练习做的太少,软件开发知识想看懂太难了,必须是边读资料边动手练习.莫说是新人,Java老人研究新技术的时候也是边读资料边练习.因此整理和编排了一系列的练习题,原发表于技术帮网站,但毕竟博客园更大,特转摘于此,希望对新人学习有帮助. 1  分页控件 在软件系统中,数据库中会存储大量的数据,譬如公文列表,为了提高查询速度,每次只显示20条记录,但可以通过翻页功能查看不同页的数据列表. 根据以上功能需求,定义一个分页控件类: 属性:总记录数.每页