Java 23种设计模式之工厂方法模式

来源:互联网 发布:选择题自动填充软件 编辑:程序博客网 时间:2024/05/16 17:24

1. 概念

    定义一个用于创建对象的接口,让子类决定实例化哪个类。    工厂方法使一个类的实例化延迟到其子类。

2. 创建父类接口

    public interface ILeiFeng {        /**         * 扫地         */         void sweep();        /**         * 洗衣服         */         void wash();        /**         * 买米         */         void buyRice();    }

3. 创建产品类实现父类接口

    1.产品一:学生    public class Student implements ILeiFeng {        @Override        public void sweep() {            System.out.println("学生扫地");        }        @Override        public void wash() {            System.out.println("学生洗衣服");        }        @Override        public void buyRice() {            System.out.println("学生买米");        }    }    2.产品二:志愿者    public class Volunteer implements ILeiFeng{        @Override        public void sweep() {            System.out.println("志愿者扫地");        }        @Override        public void wash() {            System.out.println("志愿者洗衣服");        }        @Override        public void buyRice() {            System.out.println("志愿者买米");        }    }

4. 创建工厂类父类接口

    public interface IFactory {        /**         * 创建雷锋对象         * @return         */        ILeiFeng createLeiFeng();    }

5. 创建工厂类子类实现工厂类父类接口

    1.学生工厂类实现    public class StudentFactory implements IFactory {        @Override        public ILeiFeng createLeiFeng() {            return new Student();        }    }    2.志愿者工厂类实现    public class VolunteerFactory implements IFactory {        @Override        public ILeiFeng createLeiFeng() {            return new Volunteer();        }    }

6. 测试类

    public class Test {        @org.junit.Test        public void test(){            //需要切换 只需要修改这个工厂类            IFactory factory = new VolunteerFactory();            ILeiFeng leiFeng = factory.createLeiFeng();            leiFeng.sweep();            leiFeng.wash();            leiFeng.buyRice();        }    }

7.小结

    优:    克服了简单工厂开放-封闭原则,保持了封装对象创建过程的优点,    拥抱变化,符合迪米特法则,符合依赖倒置原则,符合里氏替换原则。         缺:    需要Creator和相应的子类作为factory method的载体,如果应用模型    确实需要creator和子类存在,则很好;否则的话,需要增加一个类层次。
阅读全文
0 0
原创粉丝点击