zoukankan      html  css  js  c++  java
  • 设计模式之工厂方法模式

    设计模式之工厂方法模式

    (一)什么是工厂方法模式

      工厂方法模式也称为多态工厂模式,也是对象的创建模式。定义了一个创建产品对象的工厂接口或抽象类,将实际创建工作推迟到它的实现类或子类当中。核心工厂类不再负责产品的创建,这样核心类就成为了一个抽象工厂角色,仅仅负责定义具体工厂类必须实现的借口,具体产品的创建,交给与其对应的核心工厂类的具体实现类或子类 。

    (二)工厂方法模式中的角色 

      1. 抽象工厂角色

        工厂方法模式的核心,任何具体工厂类必须实现这个借口或抽象类。

      2. 具体工厂角色

        抽象工厂的具体实现类,负责具体产品的创建。

      3. 抽象产品角色

        所创建的所有对象的父类,它负责描述所有实例的共有接口。

      4. 具体产品角色

        工厂方法所创建的具体实例对象

    (三)工厂方法模式的具体实现

       1. 抽象工厂

      定义了一个接口,包含一个抽象方法返回Fruit对象

    public interface FruitFactory {
        Fruit getFurit();
    }

      2. 具体工厂

      定义了两个具体工厂类AppleFactory和OrangeFactory,实现了抽象工厂FruitFactory接口,返回具体的产品对象

    public class AppleFactory implements FruitFactory {
    
        @Override
        public Fruit getFurit() {
            return new Apple();
        }
    
    }
    
    
    public class OrangeFactory implements FruitFactory {
    
        @Override
        public Fruit getFurit() {
            return new Orange();
        }
    
    }

      3. 抽象产品

      定义了一个抽象产品类Fruit

    public interface Fruit {
        void get();
    }

      4. 具体产品

      定义了两个具体产品类Apple和Orange实现了Fruit接口

    public class Apple implements Fruit {
    
        @Override
        public void get() {
            System.out.println("苹果采摘");
        }
    
    }
    
    
    public class Orange implements Fruit {
    
        @Override
        public void get() {
            System.out.println("橘子采摘");
        }
    
    }

      测试:

    public class Test {
        public static void main(String[] args) {
            FruitFactory appleFactory = new AppleFactory();
            Fruit apple = appleFactory.getFurit();
            FruitFactory orangeFactory = new OrangeFactory();
            Fruit orange = orangeFactory.getFurit();
            apple.get();
            orange.get();
        }
    }

    (四)工厂方法模式与简单工厂模式的比较  

      工厂方法类的核心是一个抽象类或接口,需要具体工厂类实现这个接口,而不同具体产品对应不同的具体工厂类,用于创建对应的具体类;简单工厂模式的核心类是一个具体的类,由这个工厂类创建具体的对象。

      换个角度说,工厂方法模式就是每一个具体类(这些具体类有着共同的父类)都有一个与其对应的工厂类负责创建这个类的对象,而这些工厂类实现了同一个抽象工厂接口。

      当有新的具体类添加时,源代码不用修改,只需将给类实现具体类的共同父类,创建一个与该类对象的具体工厂类并实现抽象工厂方法即可。

    可以演变成简单工厂模式。

  • 相关阅读:
    2019学期第十周编程总结
    2019学期第九周编程总结
    第七次作业
    第六次作业
    第五次作业
    jsp第四次作业
    3.10
    3.4
    3.3jsp作业
    最后一次安卓作业
  • 原文地址:https://www.cnblogs.com/gdy1993/p/9150607.html
Copyright © 2011-2022 走看看