美文网首页
Java设计模式-工厂模式

Java设计模式-工厂模式

作者: 爱情绅士 | 来源:发表于2018-12-15 22:41 被阅读0次

    工厂模式可以细分成三种:
    1 简单工厂
    2 工厂方法
    3 抽象工厂

    简单工厂

    简单工厂.png
    //定义一个手机接口,手机必须按照这个标准来
    public interface Phone {
        String getName();
    }
    
    public class HuaWei implements Phone {
        @Override
        public String getName() {
            return "这是一个华为手机";
        }
    }
    
    public class XiaoMi implements Phone {
        @Override
        public String getName() {
            return "这是一个小米手机";
        }
    }
    
    /**
     * 简单工厂模式
     */
    //定义一个生产手机的工厂类
    public class PhoneFactory {
    
        static Phone getPhone(String name) {
            if (name.equals("华为")) {
                return new HuaWei();
            }else if (name.equals("小米")) {
                return new XiaoMi();
            }else {
                System.out.println("暂不生产该手机");
                return null;
            }
        }
    }
    
    public class Test {
        public static void main(String[] args) {
            Phone phone=PhoneFactory.getPhone("华为");
            System.out.println(phone.getName());
        }
    }
    

    结果:

    result.png
    思考:世界上存在这种工厂吗?这么牛逼,同时生产华为和小米,乃至任何东西,不符合实际。引出 工厂方法模式

    工厂方法

    工厂方法.png
    //声明一个工厂接口,工厂必须符合下面的标准
    public interface FunctionFactory {
        Phone getPhone();
    }
    
    public class HuaWeiFactory implements FunctionFactory{
        @Override
        public Phone getPhone() {
            return new HuaWei();
        }
    }
    
    public class XiaoMiFactory implements FunctionFactory {
        @Override
        public Phone getPhone() {
            return new XiaoMi();
        }
    }
    
    public class Test {
        public static void main(String[] args) {
            Phone phone = new HuaWeiFactory().getPhone();
            System.out.println(phone.getName());
        }
    }
    

    结果:

    result.png
    思考:这个进阶版更加符合实际一点,各个工厂有自己的科技。但是用户需要知道厂家。引出 抽象工厂模式

    抽象工厂

    public abstract class Factory {
        public abstract Phone getPhone();
    
        public static Phone getPhoneByName(String name) {
            if (name.equals("华为")) {
                return new HuaWeiF().getPhone();
            }else if (name.equals("小米")) {
                return new XiaoMiF().getPhone();
            }else {
                System.out.println("暂不生产该手机");
                return null;
            }
        }
    }
    
    public class HuaWeiF extends Factory {
        @Override
        public Phone getPhone() {
            return new HuaWei();
        }
    }
    
    public class XiaoMiF extends Factory {
        @Override
        public Phone getPhone() {
            return new XiaoMi();
        }
    }
    
    public class Test {
        public static void main(String[] args) {
            Phone phone = Factory.getPhoneByName("华为");
            System.out.println(phone.getName());
        }
    }
    

    结果:

    image.png
    思考: 这个怎么样,用户不需要知道厂商,只关心结果。在简单工厂中,各个工厂的业务逻辑非常复杂,代码很乱。抽象工厂可以隐藏复杂的逻辑业务,易于维护。

    结语

    归纳一下

    简单工厂模式
    一个工厂生产各种各样的东西,看似功能强大,其实不现实。用户不关心怎么实现

    工厂方法模式
    定义一个工厂接口,在制定一些标准,比如:不同品牌的汽车工厂,都要实现这个接口,
    都要实现这些标准,比如:汽车安全达标。
    调用的时候,实例化工厂,用户需关心内部实现

    抽象工厂模式
    定义一个抽象工厂类,让其他工厂来继承他,拥有相同的方法不同的实现,对用户来说,不需要关心内部实现,对这个方法类来说。很好维护,如果在简单工厂中,各个工厂的业务逻辑非常复杂,代码很乱。抽象工厂可以隐藏复杂的逻辑业务,只关心结果。

    PS:看懂了就要自己写出来,尝试换一个例子

    相关文章

      网友评论

          本文标题:Java设计模式-工厂模式

          本文链接:https://www.haomeiwen.com/subject/oslzhqtx.html