java工厂模式含义_工厂模式个人理解--JAVA

一直想学习下设计模式,不过总是被耽搁,今天就从最简单的工厂模式开始吧.记录下来.

买了个GOF的设计模式的书,不过自己水平有限,上面的例子又都不是java的,举的例子又不像国内的那种简单, 所以看起来有点吃力,

就去网上搜了下看看别人的新的,结果发现大部分内容都一样, 而且大部分内容和书上的也一样.只是例子换了而已.

对于工厂模式的描述, 各个博客基本是一字不差,而且感觉过于学院派.我还是把我个人理解写下来吧.

工厂模式分类:(GOF的书中只说了2种,1,2算一种)

1.简单工厂

2.工厂方法

3.抽象工厂

下面一种一种来说.有个博客的开车的例子不错.我也用这个例子来说明.

1.简单工厂

例如一个土豪,有三辆车,奔驰,宝马,奥迪.  还雇了司机为他开车。不过土豪坐车时总是怪怪的:

上奔驰,车后跟司机说“开奔驰车!”,坐上宝马后他说“开宝马车!”,坐上奥迪说“开奥迪车!”

这中问题,在程序中也会出现. 可以用简单工厂来解决.(总感觉好像学习多态的时候也是这种例子)

代码很简单. 先抽象一个车的接口,每个车都实现这个接口.

然后做个生产车的工厂(一个类),来判断生成什么车.

public interface Car {

public void driver();

}

public class BenCar implements Car {

@Override

public void driver() {

System.out.println("Ben dirver !!!");

}

}

public class AodiCar implements Car {

@Override

public void driver() {

System.out.println("Aodi dirver !!!");

}

}

//来判断生成什么车

public class CarFactory {

public static Car getCar(String type){

if(type.equals("Ben")){

return new BenCar();

}

if(type.equals("Aodi")){

return new AodiCar();

}

return null;

}

}

public class Person {

public static void main(String[] args) {

Car car = CarFactory .getCar("Aodi");

car.driver();

}

}

小结:感觉很简单吧. 这个模式有一点不好的地方,就是新增一辆车的话,就需要去工厂的CarFactory里面增加一个判断.

据说这个不符合开闭原则(对扩展开放;对修改封闭).还有就是可能如果层次多的话,CarFactory比较乱吧.

(还有个个人疑惑, 是否CarFactory里面的getCar()方法必须是static的才算简单工厂?)

2. 工厂方法

工厂方法,就是把上面的CarFactory类也抽象一下,这样就符合开闭原则, 代码如下(Car类不变,就用上面的代码)

public interface Driver {

public Car getCar();

}

public class BenDriver implements Driver {

@Override

public Car getCar() {

return new BenCar();

}

}

public class AodiDriver implements Driver {

@Override

public Car getCar() {

return new AodiCar();

}

}

public class Person {

public static void main(String[] args) {

Driver driver = new AodiDriver();

Car car = driver.getCar();

car.dirver();

}

}

总结;可以看到工厂方法就是把工厂再抽象了一下.

3.抽象工厂

抽象工厂和工厂方法貌似没有太大区别.网上的说明都是指抽象工厂是为了应付更复杂的模式.

总结: 感觉工厂模式,其实主要是面向接口编程,增强代码的可扩展性等.

这个设计模式不算太难,难的应该是什么时候用这个模式.这可能只有实战经验才行了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值