java设计模式之简单工厂模式_Java设计模式之简单工厂模式

一、工厂模式的应用场景

可以统一管理对象的实例化,比如一个接口有多个实现类,使用者在使用的时候,可以传给工厂一个参数,工厂根据这个参数来选择具体的实现类。或者当一个项目中,new了成百上千个某接口的实现类,然后突然有一天,要把这个实现类换名字了,那么是非常可怕的,因为需要修改成百上千个文件,这时候,如果使用工厂模式,则只要修改一个地方就可以

二、参与者

1、接口,规范子类需要实现的方法,同时利用多态的特性,来调用子类

2、接口的实现类

3、工厂类,根据用户需求来分配实现类

4、用户类,用户类只需要统一使用工厂类,即可得到具体的实现类

三、实例说明

以形状接口为例,它的实现类是圆形和方形

1、首先,我们要定义一个形状接口,接口中要求实现类能够实现对自身形状的描述,代码如下:

interface Shape {

public void desc();

}

2、我们再来实现圆形和方形,它们均遵守形状接口

class Circle implements Shape {

public void desc() {

System.out.println('我是一个圆形');

}

}

class Square implements Shape {

public void desc() {

System.out.println('我是一个方形');

}

}

3、再来定义一个形状工厂,工厂中,返回值应该是接口的类型(多态的特性),然后提供一个由用户提供的选择参数shapeName,工厂则根据这个参数来返回对象,代码如下:

class ShapeFactory {

public static Shape getInstance(String shapeName) {

if(shapeName.equalsIngoreCase('circle')) {

return new Circle();

} else if(shapeName.equalsIngoreCase('square')) {

return new Square();

}

return null;

}

}

4、接下来就是享受使用工厂模式带来的便利的时候了,且看如下代码:

public class Demo {

public static void main(String[] args) {

Shape s1 = ShapeFactory.getInstance('circle');

Shape s2 = ShapeFactory.getInstance('square');

s1.desc();

s2.desc();

// 最后的输出为:

// 我是一个圆形

// 我是一个方形

}

}

好处是显然的,比方说,我们在创建circle类的同时,还需要进行一系列复杂的操作,采用工厂模式,就可以把这些操作集合起来放在工厂里,从而用户使用的时候就无需关心内部的实现细节。同时,如果某天,Circle类要改名为SuperCircle了,那么我们也只要在工厂里修改一下就可以,从而可以避免对大量文件进行修改

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值