Java设计模式——工厂方法设计模式

概述

之前简单介绍了简单工厂设计模式,需要的童靴可以点击这里查看详情。
本文主要介绍的是工厂方法设计模式。那么,工厂方法设计模式跟简单工厂设计模式有什么不同的呢。先看一下UML图
工厂方法设计模式

简单工厂的区别

简单工厂中,工厂类就一个具体的实现类,它封装了所有的必要逻辑。使用中,可以根据客户端选择的条件动态地实例化相关类。而在工厂方法设计模式中,创建了一个基类的抽象工厂,然后又创建了子类的工厂,这样可以让子类去决定实例化哪个工厂类。使得工厂类的实例化被延迟到了子类。这样就可以把简单工厂中的的具体的内部逻辑判断移送到了客户端,如果以后要加功能的话就不必兴师动众修改工厂类了,修改客户端就好了。这样子更符合开闭原则,工厂类和产品类的耦合性更小一些,修改的时候破坏性更小。

代码举例

跟简单工厂类一样,还是以鸟类进行举例,说明工厂方法类的基本实现。    
/**
 * Bird 接口(鸟类的基类  角色:Product)
 */
public interface Bird {
    public void fly();
    public void run();
}
下面是具体的产品角色类
/**
 * 鸵鸟(不会飞,跑得快)
 * 角色:ConcreteProduct
 */
public class Ostrich implements Bird {
    @Override
    public void fly() {
        System.out.print("不会飞");
    }

    @Override
    public void run() {
        System.out.print("跑得快");
    }
}
/**
 * 鹦鹉(会飞,跑得慢)
 * 角色:ConcreteProduct
 */
public class Parrot implements Bird {
    @Override
    public void fly() {
        System.out.print("会飞");
    }

    @Override
    public void run() {
        System.out.print("跑得慢");
    }
}

上面是产品类,跟简单工厂类是一样的,不需要多说。下面说一下工厂类

/**
 * 角色:工厂基类
 */
public interface BaseBirdFactory {
    Bird getBird();
}
/**
 * 鸵鸟工厂
 * 具体的工厂子类
 */
public class OstrichFactory implements BaseBirdFactory{

    private static OstrichFactory ostrichFactory;

    private OstrichFactory(){

    }

    public static OstrichFactory getInstance(){
        if(ostrichFactory==null){
            ostrichFactory = new OstrichFactory();
        }
        return ostrichFactory;
    }

    @Override
    public Bird getBird() {
        return new Ostrich();
    }
}
/**
 * 鹦鹉工厂
 * 具体的工厂子类
 */
public class ParrotFactory implements BaseBirdFactory {

    private static simplefactory.ParrotFactory parrotFactory;

    private ParrotFactory() {
    }

    public static simplefactory.ParrotFactory getInstance() {
        if (parrotFactory == null) {
            parrotFactory = new ParrotFactory();
        }
        return parrotFactory;
    }

    @Override
    public Bird getBird() {
        return new Parrot();
    }
}

客户端使用

public class Main {
    public static void main(String[] args){
        Bird ostrich = OstrichFactory.getInstance().getBird();
        ostrich.fly();
        ostrich.run();

        Bird parrot = ParrotFactory.getInstance().getBird();
        parrot.fly();
        parrot.run();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值