频道栏目
首页 > 资讯 > Java > 正文

Java之工厂方法模式讲解

17-12-04        来源:[db:作者]  
收藏   我要投稿

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和子类存在,则很好;否则的话,需要增加一个类层次。
相关TAG标签
上一篇:DedeCMS程序include目录文件作用解析详情
下一篇:Packet Tracer6.0静态路由、rip路由、ospf路由的配置
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站