美文网首页
02 工厂模式(Factory Design Pattern)

02 工厂模式(Factory Design Pattern)

作者: 智行孙 | 来源:发表于2018-05-25 11:14 被阅读0次

    一句话概括:根据提供参数的不同实例化并返回不同的实现类。

    当一个超类拥有众多子类,且我们需要返回其中一个子类时可以使用工厂模式。工厂模式将子类实例化的任务由客户端转嫁给工厂类。

    工厂设计模式(Factory Design Pattern)也被称为工厂方法设计模式(Factory Method Design Pattern)

    Factory Design Pattern Super Class

    在工厂模式中,超类可以是接口、抽象类或者是普通的JAVA类。

    public abstract class Computer {
    
        public abstract String getRAM();
        public abstract String getHDD();
        public abstract String getCPU();
    
        @Override
        public String toString(){
            return "RAM= "+this.getRAM()+", HDD="+this.getHDD()+", CPU="+this.getCPU();
        }
    }
    

    Factory Design Pattern Sub Classes

    定义两个子类PC和Server

    public class PC extends Computer {
    
        private String ram;
        private String hdd;
        private String cpu;
    
        public PC(String ram, String hdd, String cpu){
            this.ram=ram;
            this.hdd=hdd;
            this.cpu=cpu;
        }
        @Override
        public String getRAM() {
            return this.ram;
        }
    
        @Override
        public String getHDD() {
            return this.hdd;
        }
    
        @Override
        public String getCPU() {
            return this.cpu;
        }
    
    }
    

    两个类都继承于父类Computer

    public class Server extends Computer {
    
        private String ram;
        private String hdd;
        private String cpu;
    
        public Server(String ram, String hdd, String cpu){
            this.ram=ram;
            this.hdd=hdd;
            this.cpu=cpu;
        }
        @Override
        public String getRAM() {
            return this.ram;
        }
    
        @Override
        public String getHDD() {
            return this.hdd;
        }
    
        @Override
        public String getCPU() {
            return this.cpu;
        }
    
    }
    

    Factory Class

    我们已经有了一个超类和它的两个子类,现在我们可以开始定义工厂类

    public class ComputerFactory {
    
        public static Computer getComputer(String type, String ram, String hdd, String cpu){
            if("PC".equalsIgnoreCase(type)) return new PC(ram, hdd, cpu);
            else if("Server".equalsIgnoreCase(type)) return new Server(ram, hdd, cpu);
    
            return null;
        }
    }
    

    关于工厂类有两点比较重要的:

    • 我们可以让工厂类是单例(Singleton)或者我们可以用定义工厂方法为静态方法。
    • 根据传入参数的不同,返回不同的子类的实例。

    下面是简单的调用方法:

    public class TestFactory {
    
        public static void main(String[] args) {
            Computer pc = ComputerFactory.getComputer("pc","2 GB","500 GB","2.4 GHz");
            Computer server = ComputerFactory.getComputer("server","16 GB","1 TB","2.9 GHz");
            System.out.println("Factory PC Config::"+pc);
            System.out.println("Factory Server Config::"+server);
        }
    
    }
    

    执行结果为

    Factory PC Config::RAM= 2 GB, HDD=500 GB, CPU=2.4 GHz
    Factory Server Config::RAM= 16 GB, HDD=1 TB, CPU=2.9 GHz
    

    Factory Design Pattern Advantages

    工厂设计模式的优势有:

    • 工厂设计模式提供了一种基于接口的编程而不是关注其实现。
    • 工厂设计模式从客户端中移除了子类的实例化部分。工厂设计模式让我们的代码更健壮、更少的耦合且易于拓展。
    • 工厂模式通过继承提供子类实现和客户端类之间的抽象。

    相关文章

      网友评论

          本文标题:02 工厂模式(Factory Design Pattern)

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