文章开始借用大话设计模式中的例子说一下面向对象的思维。
“话说三国时期,曹操令百万大军攻打东吴,曹操说了一句:“喝酒唱歌,人生真爽”,一臣子为了拍马屁命令工匠刻板印刷,以便名流青史,
样张拿出来,曹操一看,不妥,当即改成对酒当歌,接着工匠连夜改版,只得全部重新改来,改完之后,曹操一看,感觉人生真爽太过直接,改为人生几何,接着工匠又要全部
改之。。。。。”
问题出在哪里呢?,因为三国时期活字印刷术还没有发明,所以要改字的时候,就必须整个模板全部重新刻,有了活字印刷术之后,只需要更改要改之字就可以!!
第一,要改只需要更改要改之字,此为可维护,第二,这些字可以在以后的使用中重复使用,这就是可复用,第三,若要加字,只需要另外刻字加入即可,这就是可扩展,
第四,字的排列顺序可以改变,可以将活字的排列顺序改变即可,这就是灵活性好!!
这就是面向对象的四个优点:可维护,可复用,可扩展,灵活性好!!
下面步入正题,说一下设计模式的简单工厂模式:
假设我们有一家水果加工厂来加工水果,加工完水果之后给每个代销店,每个代销店销售的水果种类都不一样,我们这里有苹果,香蕉,梨子等等。
我们要保证每一个代销商来到工厂之后都能拿到自己想要的水果。
首先我们要定义一个水果的基类:
package com.panther.dong.designpattern.simpleFactory;
/**
* fruit class
* Created by panther on 15-8-29.
*/
public class Fruit {
private String name;//水果名字
public Fruit(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getFruit() {
return this.name;
}
}
定义了水果名字属性,再分别定义苹果类和香蕉类,如下所示:
package com.panther.dong.designpattern.simpleFactory;
/**
* apple pojo
* Created by panther on 15-8-29.
*/
public class Apple extends Fruit {
public Apple() {
super("苹果");
}
@Override
public String getFruit() {
return this.getName();
}
}
不同的代销商来工厂取得不同的水果,
package com.panther.dong.designpattern.simpleFactory;
/**
* fruit factory
* Created by panther on 15-8-29.
*/
public class FruitFactory {
public static Fruit getFruit(String name) {
Fruit fruit = null;
switch (name) {
case "apple":
fruit = new Apple();
break;
case "banana":
fruit = new Banana();
break;
default:
break;
}
return fruit;
}
public static void main(String[] args) {
Fruit fruit = FruitFactory.getFruit("apple");
System.out.println(fruit.getFruit());
Fruit fruit1 = FruitFactory.getFruit("banana");
System.out.println(fruit1.getFruit());
}
}
输出结果:
苹果
香蕉