工厂方法模式--简单的看法

来源:互联网 发布:lo娘为什么很讨厌知乎 编辑:程序博客网 时间:2024/05/22 01:43

工厂方法模式定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method使一个类的实例化延迟到了子类。 (完全符合开闭原则,解决了简单工厂方法模式添加新的类需要去修改原有的类)

结构与角色
Factory:抽象工厂。工厂方法模式的核心,声明工厂方法,返回一个产品。在任何情况下创建对象的工厂类必须继承当前的接口。
ConcreteFactory:具体工厂。实现抽象工厂接口的具体java类,实现了工厂方法,含有与应用密切相关的逻辑,有客户调用返回一个产品实例。
Product:抽象产品,定义产品接口。工厂方法模式所创建的对象的父类型,产品抽象共同拥有的接口。
ConcreteProduct:具体产品。实现抽象产品角色接口的类,工厂方法模式所创建的每一个对象都是某个具体产品角色的实例。

情景
家兴是一个非常喜欢打篮球游戏的屌丝,同时是一个IT男,最近公司让它开发一些投篮的一些类,但是要求是不能违背开闭原则,以后更改其它代码,因此家兴想到工厂方法模式;
打篮球触发行为动作,其实都是那一瞬间的肌肉记忆反应的,但是在游戏中,它是主要通过人为控制来实现,这样我们通过Mind接口来替代Factory,同时ShotTechnology接口代替Product。同时家兴如果再需要填加新的投篮技术,只需要通过继承MIndShotTechnology这两个接口来实现,就可以实现这一技术,只需要在客户端进行调用。如添加抛投等等

工厂方法模式xml图
xml图

//接口类public interface Mind {    public ShotTechnology mind();}public interface ShotTechnology {}
//继承Mind接口public class DryPickMind implements Mind {    public ShotTechnology mind(){        return new DryPick();    }}public class ScramMind implements Mind {    public ShotTechnology mind(){        return new Scram();    }}
//继承ShotTechnology接口public class DryPick implements ShotTechnology{    public DryPick(){        System.out.println("我家兴要使用干拔,我看你们谁能拦我。");    }}public class Scram implements ShotTechnology{    public Scram(){        System.out.println("我家兴要使用急停,你还没反应,呵呵。");    }}
1 0
原创粉丝点击