发表于: 2017-09-23 22:45:50
1 847
今日完成的事情:
通过学习spring工厂模式,关联Java相关概念
首先Java是面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的。但是在一些情况下, new操作符直接生成对象会比较麻烦,对象的创造需要一系列的步骤: 可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例等,在这些情况,新对象的建立就是一个 “过程”,不仅是一个操作,像一部大机器中的一个齿轮传动。如何能轻松方便地构造对象实例,而不必关心构造对象实例的细节和复杂过
程,这就是工厂的意义所在。
抽象工厂模式是用来创建一组相关或者相互依赖的对象。比如宝马320系列使用空调型号A和发动机型号A,而宝马230系列使用空调型号B和发动机型号B,那么使用抽象工厂模式,在为320系列生产相关配件时,就无需制定配件的型号,它会自动根据车型生产对应的配件型号A。
当每个抽象产品都有多于一个的具体子类的时候(空调有型号A和B两种,发动机也有型号A和B两种),抽象工厂模式提供两个具体工厂角色(宝马320系列工厂和宝马230系列工厂),分别对应于这两个具体产品角色,每一个具体工厂角色只负责某一个产品角色的实例化。每一个具体工厂类只负责创建抽象产品的某一个具体子类的实例。
产品类
abstract class BMW {
public BMW(){
}
}
public class BMW320 extends BMW {
public BMW320() {
System.out.println("制造-->BMW320");
}
}
public class BMW523 extends BMW{
public BMW523(){
System.out.println("制造-->BMW523");
工厂类
public class Factory {
public BMW createBMW(int type) {
switch (type) {
case 320:
return new BMW320();
case 523:
return new BMW523();
default:
break;
}
return null;
客户类
public class Customer
{
public static void main(String[] args)
{
Factory factory = new Factory();
BMW bmw320 = factory.createBMW(320);
BMW bmw523 = factory.createBMW(523);
}
}
若是不用工厂,客户需要知道怎么去创建一款车,客户和车就紧密耦合在一起了. 而工厂类的出现降低耦合,把创建宝马的操作细节都放到了工厂里面去,客户直接使用工厂的创建工厂方法,传入想要的宝马车型号就行了,而不必去知道创建的细节.
这里涉及到继承借口以及实现概念,extends/implements/interface做了学习了解;
extends
比如有一个类就是people,那么人本身可以有很多方法和属性,具体到Betty这个人,肯定具有people类的所有方法和属性,但是还有一些特殊方法和属性,所以我们就采用extends来继承父类已有的
interface/implements
整体上来说,implements是实现接口的关键字,Interface是代表接口的名词 JAVA中不支持多重继承,但是可以用接口来实现,这样就要用到implements,继承只能继承一个类,但implements可以实现多个接口,用逗号分开就行了比如class A extends B implements C,D,E;具体如java 中定义的接口Animal ,实现接口的类定义如下: public class Tiger implements Animal。
参数,形式参数和实际参数
即函数的参数分为形参和实参两种;形参出现在函数定义中,在整个函数体内都可以使用,离开该函数则不能使用。实参出现在主调函数中,进入被调函数后,实参变量也不能使用。形参和实参的功能是作数据传送。发生函数调用时,主调函数把实参的值传送给被调函数的形参从而实现主调函数向被调函数的数据传送。
例如;定义一个函数void add(int a, int b),这里的a和b就是形参;当进行函数调用的时候,add(1, 2),这里的1和2就是实参。
重写(Override)
重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写! 重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。
例如;下列这个代码就会报错,因为b的引用类型Animal没有bark方法。
class Animal{
public void move(){
System.out.println("动物可以移动");
}
}
class Dog extends Animal{
public void move(){
System.out.println("狗可以跑和走");
}
public void bark(){
System.out.println("狗可以吠叫");
}
}
public class TestDog{
public static void main(String args[]){
Animal a = new Animal(); // Animal 对象
Animal b = new Dog(); // Dog 对象
a.move();// 执行 Animal 类的方法
b.move();//执行 Dog 类的方法
b.bark();
}
}
做出修改之后可以了
再修改的时候,发现一处小错误,就是同一个类在一起会报错;这也是项目里需要建包的原因;提供多层的命名空间,解决命名冲突;(处于不同package中的类可以拥有相同的名字)对类按功能进行分类,使得项目的组织更加清楚。
明日计划的事情:
继续任务一,复习之前的步骤,这几天大的概念理解了一部分了,可以试着继续走了。
遇到的问题及解决方法:
进度有点慢,各种概念意义依然理解不到位,继续努力吧
收获:
对Java这些大的常用概念理解的更多了。
评论