设计模式-简单工厂模式
返回上一级目录:Java设计模式
简单工厂模式,又叫静态工厂模式,是最简单的一种模式,只有3种角色:抽象产品接口,具体产品,工厂角色。
类关系图如下:
抽象产品接口,就是定义产品的行为
/** * @Author zhouw * @Description 就是一个球 * @Date 2020-01-17 */ public interface IBall { void say(); }
具体产品,具体产品的实现,也就是我们最终要得到的对象,当然不止一个
/** * @Author zhouw * @Description 篮球的具体实现 * @Date 2020-01-17 */ public class Basketball implements IBall { @Override public void say() { System.out.println("我是一个篮球,又被扔进筐里"); } }
/** * @Author zhouw * @Description 足球的具体实现 * @Date 2020-01-17 */ public class Football implements IBall { @Override public void say() { System.out.println("我是一个足球,被踢来踢去"); } }
工厂角色,工厂负责创建所有的产品实例
/** * @Author zhouw * @Description 球类工厂,负责生产各种球类,由于这个方法一般都是静态的,所以也叫静态工厂 * @Date 2020-01-17 */ public class BallFactory { public static IBall createBall(String name) { if ("football".equals(name)) { return new Football(); } else if ("basketball".equals(name)) { return new Basketball(); } // 默认创建Football return new Football(); } }
最后就是应用了
public class Application { public static void main(String[] args) { IBall ball1 = BallFactory.createBall("football"); ball1.say(); IBall ball2 = BallFactory.createBall("basketball"); ball2.say(); } }
输出:
总结
简单工厂模式的优点就是简单,客户端直接调用静态方法,传入不同的产品名,就可以得到不同的产品,使用方便。通过将创建产品业务和产品本身的业务逻辑分离,降低系统的耦合性。但是缺点也很明显,创建产品的工厂类过于逻辑集中,拓展性很差,如果要再加一个产品“排球”,就要修改工厂创建产品对象的方法,而且如果这个工厂类有问题,就会影响到所有的产品对象的创建。