java 工厂模式 抽象工厂模式_java 设计模式之工厂模式和抽象工厂模式

初次写,不足之处,请各位道友指正批评!

工厂模式:顾名思义就是建立一个工厂,对一系列具有共有属性的不同物品的创建,也就是对实现了同一个接口的不同的实现类的创建。

这是关系图:

e57b61b917d26c96899cb85d94ca85ad.png

下面,用代码演示下:

1、先创建接口:

//接口

public interface Bike {

public void riding();

}

2、再创建两实现类

//ofo

public class OfoBike implements Bike {

@Override

public void riding() {

System.out.println("this is ofo bike riding");

}

}

//mobike

public class Mobike implements Bike {

@Override

public void riding() {

System.out.println("this is mobike bike riding ");

}

}

3、创建工厂类

/**

*

* Title: 工厂类,根据不同的类型来创建不同的实现类

*

* @author Administrator

* @date 2017年3月28日上午12:07:10

*/

public class BikeFactory {

public Bike produce(String type) {

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

return new OfoBike();

} else if ("mobike".equals(type)) {

return new Mobike();

} else {

System.out.println("不是正确的类型");

return null;

}

}

}

4、测试

/**

* 工厂模式测试类

*

* @author Administrator

* @date 2017年3月27日下午11:09:06

*/

public class FactoryModeTest {

public static void main(String[] args) {

new BikeFactory().produce("ofo").riding();

}

}

输出结果:this is ofo bike riding

这种方式不好之处就是传入的类型如果发生错误,那么对应的类型就无法创建。我们可以做一些改进,工厂类增加方法,各类型用各自的方法,这样就不会有类型传错的发生。如下图所示

5f207db2c25c270029e70be69ce78a1b.png

相应的代码调整

/**

*

* Title: 工厂类,根据不同的方法来创建不同的实现类

*

* @author Administrator

* @date 2017年3月28日上午12:07:10

*/

public class BikeFactory {

public Bike produceOfo() {

return new OfoBike();

}

public Bike produceMobike() {

return new Mobike();

}

}

/**

* 工厂模式测试类

*

* @author Administrator

* @date 2017年3月27日下午11:09:06

*/

public class FactoryModeTest {

public static void main(String[] args) {

new BikeFactory().produceOfo().riding();

}

}

输出结果:this is ofo bike riding

上面结果还要创建相应的工厂类才能创建实例,来实际工作中,这很少见,所以做相应改进,将创建方法改为静态方法,这样就不同创建工厂类实例了

public class BikeFactory {

public static Bike produceOfo() {

return new OfoBike();

}

public static Bike produceMobike() {

return new Mobike();

}

}

public class FactoryModeTest {

public static void main(String[] args) {

BikeFactory.produceOfo().riding();

}

}

输出结果:this is ofo bike riding

实际开发中也是这样用

工厂模式依靠工厂类来创建实例不同的实例,然而却不能创建所有的实例,比如apple是生产iphone,而华为是生产华为的手机,这就引入了一个抽象工厂的概念,要创建新的新的实例,直接再创建一个新的工厂类即可,这样也避免了原有工厂类的修改,这样原有的代码就可以这样修改

/**

* Title: 工厂类

*

* @author Administrator

* @date 2017年3月28日上午12:07:10

*/

public interface BikeFactory {

public Bike produce();

}

/**

* Title: OfoBikeFactory

*

* @author Administrator

* @date 2017年3月28日上午1:01:23

*/

public class OfoBikeFactory implements BikeFactory {

@Override

public Bike produce() {

return new OfoBike();

}

}

/**

* Title: MobikeFactory

*

* @author Administrator

* @date 2017年3月28日上午1:01:59

*/

public class MobikeFactory implements BikeFactory {

@Override

public Bike produce() {

return new Mobike();

}

}

/**

* 工厂模式测试类

*

* @author Administrator

* @date 2017年3月27日下午11:09:06

*/

public class FactoryModeTest {

public static void main(String[] args) {

new OfoBikeFactory().produce().riding();

}

}

输出结果:this is ofo bike riding

如果再来一个,只要创建相应的factory即可,无需改动现有的代码,符合六大设计原则(java 8 中好像可以定义接口的static 方法了)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值