java面向对象与设计模式

     2022-03-18     713

关键词:

设计原则:SOLID 可以说,五个设计原则各司其职。
单一职责原则(S):用于类的设计
开闭原则(O):总的指导思想
里氏替换原则(L):用于指导类继承的设计
接口隔离原则(I):用于指导接口的设计
依赖翻转原则(D):用于指导如何抽象

类之间的关系
继承=实现>组合>聚合>关联>依赖

UML表现
继承:带三角箭头的实线,箭头指向父类
实现:带三角箭头的虚线,箭头指向接口
组合:带实心菱形的实线,菱形指向整体
聚合:带空心菱形的实线,菱形指向整体
关联:带普通箭头的实线,指向被拥有者
依赖:带普通箭头的虚线,指向被使用者
简 单说明一下,《1》继承和实现是java自带的,属于强耦合关系;《2》组合和聚合是特殊的关联关系,关联关系体现在代码上就是作为成员变量,聚合关系要 强于关联关系,代码上往往会通过set()方法完成对成员变量的赋值,组合关系则更加强一些,往往在构造函数就完成了初始化,也就是说,在一般情况下,生 命周期上组合>聚合>关联;《3》依赖和关联恰恰相反,代码上一般不出现在成员变量。常见于局部变量、方法的参数或者对静态方法的调用。
 
设计模式:(经典23式)
设计模式的核心在于复用,如果单用,则成为累赘。

第零式 简单工厂模式。
预备知识:接口
接口能够隔离封装,为系统的可插拔性提供保证。在接口也抽象类的选择上,应该优先选择接口,只有需要为子类提供公共功能的时候,才需要考虑抽象类。
下面举个例子,说明接口的具体实现。
public interface product {
    
    public void createProduct();

}


public class conCreteProduct implements product {

    @Override
    public void createProduct() {
        // TODO Auto-generated method stub
        System.out.println("生产产品");
    }

}


public class user {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        product prod1 = new conCreteProduct();
        prod1.createProduct();
    }

}
上面这个例子虽然使用了接口隔离(并没有完全隔离),但是还是存在一些问题。那就是user需要知道具体实现。这样user和具体产品就存在着耦合关系。而增加一个工厂类则可以达到解除耦合的目的。
public interface product {
    
    public void createProduct();

}


public class conCreteProduct implements product {

    @Override
    public void createProduct() {
        // TODO Auto-generated method stub
        System.out.println("生产产品");
    }

}


public class factory {
    
    public void createProduct() {
        product prod1 = new conCreteProduct();
        prod1.createProduct();
    }

}


public class user {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        factory fact1 = new factory();
        fact1.createProduct();
    }

}
增加了factory类以后,user就可以不需要关注具体实现了。把生产商品的事情交给了工厂来处理。而自己则专注于消费产品就可以了。这对于一个产品来说,的确是得不偿失的。但如果产品的种类多的话,优势还是很明显的(user不需要考虑繁琐的创建过程)。
 
简单工厂模式的定义:提供一个创建对象实例的功能,而无须关心其具体实现。被创建对象的类型,可以是接口,抽象类,也可以是具体的类。
 
简单工厂的本质是选择实现。优点在于帮助封装和解耦,缺点则在于增加了客户端复杂度以及不利于扩展子工厂。
 
简单工厂常采用静态方法来实现,所以有时被称作静态工厂。为了选择实现,还可以把选择的部分配置到配置文件当中去。
public interface product {
    
    public void makeProduct();

}


public class concreteProduct implements product {

    @Override
    public void makeProduct() {
        // TODO Auto-generated method stub
        System.out.println("中国制造");
    }

}



public class factory {
    
    public static product makeProduct() {

        Properties pro = new Properties();
        InputStream in = null;
        try {
            in = factory.class.getResourceAsStream("factory.properties");
            pro.load(in);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                in.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        
        product prod = null;
        try {
            prod = (product) Class.forName(pro.getProperty("product1")).newInstance();
        } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        return prod;
        
    }
    
}


public class user {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        product prod = factory.makeProduct();
        prod.makeProduct();
    }

}


配置文件factory.properties

product1=No0.concreteProduct














java面向对象与设计模式

第四式工厂方法模式定义:定义一个用于创建对象的接口,让子类决定实例化那一个类,对象工厂模式使一个类的实例化延迟到子类。优点:可以在不知具体实现的情况下编程;更容易扩展对象的新版本;连接平行的类层次。缺... 查看详情

java面向对象与设计模式

第一式外观模式定义:为子系统的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这一接口使得这一子系统更加容易使用。优点:松散耦合简单易用更好地划分访问的层次缺点:不应过度使用本质:封装交互简单... 查看详情

java面向对象与设计模式

第五式抽象工厂模式定义:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。(创建的对象之间有约束)抽象工厂模式的本质:选择产品簇的实现优点:分离接口和产品簇,使得切换产品簇变得容易缺... 查看详情

javascript设计模式学习之一——javascript面向对象与java的区别

一、静态语言与动态语言面向对象之对比  封装:    1)封装数据:java中通过私有变量Private等实现,javascript中通过函数内的局部变量实现    2)封装实现:对象内部的变化对于外部是透明的,对象之间通过暴露的... 查看详情

马凯军201771010116《面向对象与程序设计java》

...与要求(1)综合掌握java基本程序结构;(2) 综合掌握java面向对象程序设计特点;(3)综合掌握javaGUI 程序设计结构;(4)综合掌握java多线程编程模型;(5)综合编程练习。2、实验内容和步骤任务1:填写课程课后调查问卷,网址:... 查看详情

java基础06类与对象封装构造方法

第1章面向对象思想1.1面向对象思想概述概述Java语言是一种面向对象的程序设计语言,而面向对象思想是一种程序设计思想,我们在面向对象思想的指引下,使用Java语言去设计、开发计算机程序。这里的对象泛指现实中一切事物... 查看详情

java面向对象与设计模式

设计原则:SOLID可以说,五个设计原则各司其职。单一职责原则(S):用于类的设计开闭原则(O):总的指导思想里氏替换原则(L):用于指导类继承的设计接口隔离原则(I):用于指导接口的设计依赖翻转原则(D):用于指导如何抽象类... 查看详情

2016710101352016--2017--《java程序结构设计:对象与类》

1、面向对象程序设计简介   面向对象的基本思想是使用类、对象、继承、封装、消息等基本概念来进行程序设计。   采用面向对象方式开发的软件系统,其最小的程序单元是类,这些类可以生成系统中的... 查看详情

java类与对象中的方法

java语言是一门面向对象的程序设计语言,而面向对象是一种程序设计思想,在面向对象思想的指引下,使用java语言设计、开发计算机程序,这里面的对象泛指程序中(现实中)的一切事物,每种事物都有他自己的属性(特征)... 查看详情

面向对象与面向过程的区别

面向过程面向过程性能比面向对象性能好。因为类的实例化比较消耗资源。当性能是设计中非常重要的因素时,一般采用面向过程开发。最主要的性能区别在于:拿Java来说,在运行时先在Java平台编译为体系结构中立的字节码格... 查看详情

面向对象分析与设计实验七

实验一:http://www.cnblogs.com/scaugsh/p/8983219.html实验二:http://www.cnblogs.com/scaugsh/p/8983253.html实验三:http://www.cnblogs.com/scaugsh/p/9046697.html实验四:http://www.cnblogs.com/scaugsh/p/9056838.html实验七: 查看详情

《面向对象程序设计(java)》第二周学习总结

《面向对象程序设计(java)》第二周学习总结王颖奇201771010129第一部分:实验目的与要求①理论部分目的与要求(1)3.1基本知识(2)3.2数据类型(3)3.3变量(4)3.4运算符(5)3.5类型转换(6)3.6字符类型(7)3.7输入输出(8)... 查看详情

七日阅书4理解面向对象《java程序设计与计算思维》(代码片段)

目录一、前情提要二、面向对象1.类Class2.一个成熟的类3.继承4.多态三、总结四、源码地址一、前情提要【七日阅书】1计算思维和Java特性《Java程序设计与计算思维》【七日阅书】2Java的数据类型和流程控制《Java程序设计与计算... 查看详情

达拉草201771010105《面向对象程序设计(java)》第七周学习总结(代码片段)

达拉草201771010105《面向对象程序设计(java)》第七周学习总结实验七继承附加实验实验时间2018-10-111、实验目的与要求(1)进一步理解4个成员访问权限修饰符的用途;(2)掌握Object类的常用API用法;(3)掌握ArrayList类用法与... 查看详情

《面向对象程序设计(java)》第七周学习总结(代码片段)

...使用方法;(5)结合本章知识,理解继承与多态性两个面向对象程序设计特征,并体会其优点;(6)熟练掌握Java语言中基于类、继承技术构造程序的语法知识(ch1-ch5);(7)利用已掌握Java语言程序设计知识,学习设计 查看详情

设计模式与面向对象

面向对象基础抽象封装继承多态组合良好的OO设计可复用可扩充可维护设计模式 查看详情

2018-2019-220175105王鑫浩实验二《java面向对象程序设计》实验报告

...装,继承,多态3.初步掌握UML建模4.熟悉S.O.L.I.D原则5.了解设计模式二、实验内容(一)、单元测试1.三种代码伪代码百分制转五分制:如果成绩小于60,转成“不及格”如果成绩在60与70之间,转成“及格”如果成绩在70与80之间,... 查看详情

杨玲201771010133《面向对象程序设计(java)》第五周学习总结

《面向对象程序设计(java)》第五周学习总结第一部分:课程准备部分第二部分:理论知识学习部分 第四章:对象与类 4.1:类与对象的概念。 类:是构造对象的模板或蓝图。由类构造对象的过程称为创建类的实例... 查看详情