Java中的工厂模式(1)

现在已经有Car类,有Plane类。
现在做为Client,可以直接new Car,new Plane。
但如果还有其他许多交通工具,我们在客户端就是new A ,new B, new C......然后调用a.x,b.x,c.x
所以们,我们想灵活更换交通工具的话,就想到了多态。
于是乎,改为面向接口式的:
Moveable.java
public interface Moveable {
//默认是public
void run();
}
然后其他交通工具从里面继承。就好了。。。


产生的问题:
Car类的实例,是产品。Plane的实例,也是Plane类对应的产品。
而做为客户,直接对产品进行控制,似乎也说得过去,但如果有一个专门来负责管理产品的类,是不是更好了呢?


所以呢,我们引入了CarFactory和PlaneFactory两个类:
public class CarFactory {
public Car createCar(){
return new Car();
}
}


public class PlaneFactory {
public Plane createPalne(){
return new Plane();
}
}
在客户端:
//这样由plane的工厂来产生plane
PlaneFactory pf = new PlaneFactory();
Moveable m = pf.createPalne();
m.run();


CarFactory cp = new CarFactory();
Moveable m2 = cp.createCar();
m2.run();


写到这,我想你已经猜到我下一步该怎么办了。。
想想啊,前面我们解决了灵活调用交通工具的问题,现在,我们就应该解决灵活调用工厂的问题了。。


所以,我们再把工厂抽象出来:这样,就引入抽象工厂这个概念了。


抽象工厂:就是把原工厂的方法再给抽象出来,把具体生产的动作转变为对某个原有的抽象动作的实现。即是由工厂,到了抽象工厂。


以Car为主线:
也可以用接口,二者均可时,尽量用接口,因为单继承
public abstract class MoveableFactory {
public abstract Moveable create();
}
public class CarFactory extends MoveableFactory{
@Override
public Car create() {
return new Car();
}
}
这样,在客户端,我们只要写:
直接把PlaneFactory改为CarFactory就可以了。
MoveableFactory mf = new PlaneFactory();
Moveable m = mf.create();
m.run();


如上,我们既满足了客户和产品分开的条件,又满足了灵活调用的条件。不错。。。。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值