• (@WhiteTaken)设计模式学习——工厂方法模式


    这个工厂方法模式,是简单工厂的延伸,不同点在于,将某个具体的类继续细分,将核心部分抽象成一个接口。而简单工厂,把核心写在了一个类上,不利于拓展。

    举个例子,简单工厂中有苹果类,香蕉类,我们创建了一个FruitFactory的工厂类,用来生成苹果和香蕉类的实例。

    但是如果我们需要创建更多的水果类,这时候就需要修改FruitFactory工厂类。这样做很不方便。

    这时候就有了工厂方法模式的实现。

    具体方法是我们将总的工厂类,抽象成一个接口,然后创建苹果类工厂和香蕉类工厂,去实现这个接口。

    这样即使我们再添加橘子类,我们需要创建橘子类工厂去实现水果工厂的接口。

    在客户端的调用中就可以轻松获得橘子对象。

    直接上代码:

    1.创建一个水果接口,让水果们都去实现它。

    1 public interface Fruit {
    2     public void Get();
    3 }
    View Code

    2.创建苹果类和香蕉类。

     1 public class Apple implements Fruit{
     2     public void Get()
     3     {
     4         System.out.println("Apple");
     5     }
     6 }
     7 
     8 public class Banana implements Fruit {
     9     public void Get() {
    10         System.out.println("Banana");    
    11     }
    12 }
    View Code

    3.创建水果工厂的接口。

    1 public interface FruitFactory {
    2     public Fruit getFruit();
    3 }
    View Code

    4.创建苹果工厂和香蕉工厂,去实现水果工厂的接口。

     1 public class AppleFactory implements FruitFactory{
     2     public Fruit getFruit() {
     3         return new Apple();
     4     }    
     5 }
     6 
     7 public class BananaFactory implements FruitFactory {
     8     public Fruit getFruit() {
     9         return new Banana();
    10     }
    11 }
    View Code

    5.主客户端要做的事。

     1 public class MainClass {
     2     public static void main(String[] args) throws InstantiationException, IllegalAccessException {
     3         FruitFactory appleFactory=new AppleFactory();
     4         FruitFactory bananaFactory=new BananaFactory();
     5         Fruit apple=appleFactory.getFruit();
     6         Fruit banana=bananaFactory.getFruit();
     7         apple.Get();
     8         banana.Get();
     9     }
    10 }
    View Code

    这样就完成了工厂方法模式与简单工厂的结合。极大的降低了耦合。

  • 相关阅读:
    大数据基础——MR编程应用——对中间件的操作
    Hadoop_Hive整理——原理及配置
    Hadoop&Hive——小结
    mysql_小结之事务
    Linux_大数据与数据仓库
    移动布局小结
    JDBC——小结
    Mysql优化反刍
    NoSql-Verson1.0
    python-6
  • 原文地址:https://www.cnblogs.com/WhiteTaken/p/6376433.html
Copyright © 2020-2023  润新知