扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
//Platform.java
创新互联建站专注于企业成都营销网站建设、网站重做改版、瓯海网站定制设计、自适应品牌网站建设、H5技术、商城网站建设、集团公司官网建设、外贸网站制作、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为瓯海等各大城市提供网站开发制作服务。
public class Platform {
/**
* @author lusong
*/
private String brandName;
private String model;
public Platform(String bString,String mString) {
brandName=bString;
model=mString;
}
public String getBrandName() {
return brandName;
}
public String getModel(){
return model;
}
}
//ShiXian.java,其中的getList()方法返回你要求的东东
//不知道合不合你的胃口
import java.util.*;
public class ShiXian {
ArrayListPlatform PlatformList=new ArrayListPlatform();
//用于包含型号的名称,用于验证重复,在getLIst方法中使用,因为内置类不能访问方法的局部变量所有在此定义方法中的变量
ListString arrayList=new ArrayListString();
public ShiXian() {
//向该集合中添加成员,型号之间用逗号隔开
PlatformList.add(new Platform("诺基亚","7210,5530,2120"));
PlatformList.add(new Platform("摩托罗拉","V3,L6"));
PlatformList.add(new Platform("诺基亚","N70,N73,N95"));
PlatformList.add(new Platform("摩托罗拉","V4,L7"));
PlatformList.add(new Platform("摩托罗","V4,L7"));
PlatformList.add(new Platform("摩","V4,L7"));
PlatformList.add(new Platform("摩","V4,L7"));
//你可以随意添加成员,注意型号之间用逗号隔开
}
//你的要求是返回一个包含所有品牌的List,每个List项为一个包含型号的List
public ListArrayListString getList(){
//用于最终返回结果的List
ListArrayListString list=new ArrayListArrayListString(){
//重写toString()方法,便于显示手机名称
@Override
public String toString() {
int i=0;
// TODO Auto-generated method stub
StringBuilder stringBuilder=new StringBuilder();
for (Iterator iterator = this.iterator(); iterator.hasNext();) {
ArrayListString arrayList1 = (ArrayListString) iterator.next();
stringBuilder.append(arrayList.get(i));
stringBuilder.append("的型号为:");
i=i+1;
stringBuilder.append(arrayList1.toString());
}
return stringBuilder.toString();
}
};
for (Iterator iterator = PlatformList.iterator(); iterator.hasNext();) {
Platform platform=(Platform)iterator.next();
if (arrayList.contains(platform.getBrandName())) {
//该手机已经存在,只用添加型号,并且验证是否重复
String[] strings=platform.getModel().split(",");
ArrayListString arrayList3=list.get(arrayList.indexOf(platform.getBrandName()));
for (int i = 0; i strings.length; i++) {
if (!arrayList3.contains(strings[i])) {
arrayList3.add(strings[i]);
}
}
}
else {
//该手机还不存在,要添加该手机,并添加型号
arrayList.add(platform.getBrandName());
ArrayListString arrayList3=new ArrayListString();
String[] strings=platform.getModel().split(",");
for (int i = 0; i strings.length; i++) {
arrayList3.add(strings[i]);
}
list.add(arrayList3);
}
}
return list;
}
public static void main(String[] args) {
System.out.println(new ShiXian().getList());
}
}
重构可以说是覆盖,用覆盖一词来讲就比较清楚。
在面向对象的一个特性--继承中就表现出重构的意思。
重构,就是继承于父类方法的子类将子类的方法重写,方法名及参数完全相同.
重用是继承了就可以用父类定义的方法和变量,不用再定义一次。
比如说
class B {
public void see(){
System.out.println("this is b");
}
}
public class A extends B{
public void see() {
System.out.println("this is a");
}
public static void main(String[] args) {
B b=new A();
b.see();
}
}
这是重构的意思。
class B {
public void see(){
System.out.println("this is b");
}
}
public class A extends B{
public static void main(String[] args) {
B b=new A();
b.see();
}
}
这是重用的意思
我的理解重构是针对代码,写得不好自然要重新来写,但是它是建立在不改变软件现有功能的基础上,通过调整程序代码改善软件的质量、性能。
重载,在一个类定义中,可以编写几个同名的方法,但是只要它们的签名参数列表不同,让程序能够具备更好地灵活性而设计的。
代码重构(英语:Code refactoring)重构就是在不改变软件系统外部行为的前提下,改善它的内部结构。
软件重构需要借助工具完成,重构工具能够修改代码同时修改所有引用该代码的地方。在极限编程的方法学中,重构需要单元测试来支持。
java重构:指程序员对已有程序在尽量不改变接口的前提下,进行重新编写代码的工作,一般有以下几方面:
1、去除已知bug。
2、提高程序运行效率。
3、增加新的功能。
重构举例:(简化代码、提升效率)
重构前:
if(list != null list.size() 0){
for(int i = 0; i list.size(); i++){
//skip...
}
}
重构后
if(list != null){
for(int i = 0, len = list.size(); i len; i++){
//skip...
}
}
何时着手重构(Refactoring)
新官上任三把火,开始一个全新??、脚不停蹄、加班加点,一支声势浩大的千军万"码"夹裹着程序员激情和扣击键盘的鸣金奋力前行,势如破竹,攻城掠地,直指"黄龙府"。
开发经理是这支浩浩汤汤代码队伍的统帅,他负责这支队伍的命运,当齐桓公站在山顶上看到管仲训练的队伍整齐划一地前进时,他感叹说"我有这样一支军队哪里还怕没有胜利呢?"。但很遗憾,你手中的这支队伍原本只是散兵游勇,在前进中招兵买马,不断壮大,所以队伍变形在所难免。当开发经理发觉队伍变形时,也许就是克制住攻克前方山头的诱惑,停下脚步整顿队伍的时候了。
Kent Beck提出了"代码坏味道"的说法,和我们所提出的"队伍变形"是同样的意思,队伍变形的信号是什么呢?以下列述的代码症状就是"队伍变形"的强烈信号:
·代码中存在重复的代码
中国有118 家整车生产企业,数量几乎等于美、日、欧所有汽车厂家数之和,但是全国的年产量却不及一个外国大汽车公司的产量。重复建设只会导致效率的低效和资源的浪费。
程序代码更是不能搞重复建设,如果同一个类中有相同的代码块,请把它提炼成类的一个独立方法,如果不同类中具有相同的代码,请把它提炼成一个新类,永远不要重复代码。
·过大的类和过长的方法
过大的类往往是类抽象不合理的结果,类抽象不合理将降低了代码的复用率。方法是类王国中的诸侯国,诸侯国太大势必动摇中央集权。过长的方法由于包含的逻辑过于复杂,错误机率将直线上升,而可读性则直线下降,类的健壮性很容易被打破。当看到一个过长的方法时,需要想办法将其划分为多个小方法,以便于分而治之。
·牵一毛而需要动全身的修改
当你发现修改一个小功能,或增加一个小功能时,就引发一次代码地震,也许是你的设计抽象度不够理想,功能代码太过分散所引起的。
·类之间需要过多的通讯
A类需要调用B类的过多方法访问B的内部数据,在关系上这两个类显得有点狎昵,可能这两个类本应该在一起,而不应该分家。
·过度耦合的信息链
"计算机是这样一门科学,它相信可以通过添加一个中间层解决任何问题",所以往往中间层会被过多地追加到程序中。如果你在代码中看到需要获取一个信息,需要一个类的方法调用另一个类的方法,层层挂接,就象输油管一样节节相连。这往往是因为衔接层太多造成的,需要查看就否有可移除的中间层,或是否可以提供更直接的调用方法。
·各立山头干革命
如果你发现有两个类或两个方法虽然命名不同但却拥有相似或相同的功能,你会发现往往是因为开发团队协调不够造成的。笔者曾经写了一个颇好用的字符串处理类,但因为没有及时通告团队其他人员,后来发现项目中居然有三个字符串处理类。革命资源是珍贵的,我们不应各立山头干革命。
·不完美的设计
在笔者刚完成的一个比对报警项目中,曾安排阿朱开发报警模块,即通过Socket向指定的短信平台、语音平台及客户端报警器插件发送报警报文信息,阿朱出色地完成了这项任务。后来用户又提出了实时比对的需求,即要求第三方系统以报文形式向比对报警系统发送请求,比对报警系统接收并响应这个请求。这又需要用到Socket报文通讯,由于原来的设计没有将报文通讯模块独立出来,所以无法复用阿朱开发的代码。后来我及时调整了这个设计,新增了一个报文收发模块,使系统所有的对外通讯都复用这个模块,系统的整体设计也显得更加合理。
每个系统都或多或少存在不完美的设计,刚开始可能注意不到,到后来才会慢慢凸显出来,此时唯有勇于更改才是最好的出路。
·缺少必要的注释
虽然许多软件工程的书籍常提醒程序员需要防止过多注释,但这个担心好象并没有什么必要。往往程序员更感兴趣的是功能实现而非代码注释,因为前者更能带来成就感,所以代码注释往往不是过多而是过少,过于简单。人的记忆曲线下降的坡度是陡得吓人的,当过了一段时间后再回头补注释时,很容易发生"提笔忘字,愈言且止"的情形。
曾在网上看到过微软的代码注释,其详尽程度让人叹为观止,也从中体悟到了微软成功的一个经验。
我晕,楼上,重构可不是“重载构造函数”的简写。软件重构和重写压根不是一个层次上的东西!软件重构是说程序员为了对 已有程序 在尽量不改变接口的前提下 进行如下处理 而做的 重新编写代码的工作1、去除bug2、提高效率3、增加新的功能等等。而方法重写只是大多数面向对象语言提供的一种机制,目的主要是帮助实现“多态”。许多时候java代码的重构确实利用了java的方法重写机制,但是你要理解它们根本不是同一层次上的东西。 重构:站在软件整体设计思想的高度,改变软件内部结构达到提高效率,增加功能,去除bug等工作。方法重写:仅仅是java的一种语言机制,它和继承,超类可以引用子类等机制一同实现“多态”。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流