java设计模式之面向对象思想

对于初学java的人来说,由于习惯了写面向过程的程序,拿过来一个问题,总想将其分为一步一步来做,面向过程的思想根深蒂固,即使用java来写,也是披着面向对象的皮写面向过程的代码,下面通过一个例子来说明一下面向对象的设计思维(封装):例子:老张开车去东北

1,首先考虑问题域里面可以抽象出几个类(名词),进行封装。老张作为一个具体对象,可以抽象成司机类(Driver),车抽象成Car类,东北抽象成Address类

2,属性:不可脱离具体的应用环境,Driver有一个属性name,Address有一个属性name 

3,方法:考虑动作,Driver有一个方法drive(),Car有一个方法go()

4,类与类之间的关系。

//司机类

public class Driver {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void drive(Car c) {
v.go(new Address("东北"));
}
public void drive(Car c) {//
c.go(new Address(“东北”));
}
}

//Car类

public class Car {
public void go(Address dest) {
System.out.println("去" + dest.getName());
}
}

//地址类

public class Address {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Address(String name) {
super();
this.name = name;
}
}

//测试类

public class Test {
public static void main(String[] args) {
Driver d = new Driver();//实例化一个对象
d.setName("老张");
d.drive(new Car());//对象调用方法
}
}

虽然这样可以实现这个问题,但是作为一个程序设计者,要考虑到设计的程序具有可扩展性,如果需求增加,不至于大幅改动我的源码,

就这个例子,如果我的交通工具变了,或者去的地点不是东北,等等,我们就要考虑使用多态,继承

5,继承:如果满足这句话就可以使用继承,什么什么是一种什么什么

6,多态:特点为有继承、有重写、有父类引用指向子类对象

定义一交通工具抽象类:

public abstract class Vihecle {
public abstract void go(Address dest);
}


public class Car extends Vihecle{
public void go(Address dest) {
System.out.println("跑去了" + dest.getName());
}
}

public class Plane extends Vihecle{
public void go(Address dest) {
System.out.println("飞去了" + dest.getName());
}
}

public class Driver {
private String name;


public String getName() {
return name;
}


public void setName(String name) {
this.name = name;
}


public void drive(Vihecle v) {
v.go(new Address("东北"));
}

public void drive(Car c, Address dest) {
c.go(dest);
}
}

public class Test {
public static void main(String[] args) {
Driver d = new Driver();
d.setName("老张");
d.drive(new Plane());
}
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值