zoukankan      html  css  js  c++  java
  • 抽象工厂模式

    当我们需要重复的创建对象的时候,通常会使用工厂模式来创建对象,这样来减轻工作量。但工厂模式的局限性在于只能够针对相同类型的产品。比如某工厂有一条生产果冻的生产线,这条生产线可以生产不同口味的果冻,这样可以很方便使用工厂模式来生成不同口味的果冻。但是如果新加入了一条生成汽水的生产线,那么整个系统就需要重新添加响应的汽水的类。这个时候就不能够很好的体现重用性了。如果我们将果冻和汽水的生产线都抽象出一个共同的父类,那么我们就可以通过使用里氏替换原则使用同样的方式来生成不同类型的产品了。如,工人加工->包装。替换了原来和具体的对象耦合的那部分内容,提高了系统的扩展性和可维护性。

    接下来我们通过一个实例来说明

    image

    代码如下:

    public class test
    {
        public static void main(String args[])
        {
            {
                factory f=new fruitA();
                f.show();
                f=new drinkA();
                f.show();
            }
        }
    }
    class factory
    {
        void show()
        {
            System.out.println("factory");
        }
    }
    class fruit extends factory
    {
        void show()
        {
            System.out.println("fruit");
        }
    }
    class drink extends factory
    {
        void show()
        {
            System.out.println("drink");
        }
    }
    class fruitA extends fruit
    {
        void show()
        {
            System.out.println("fruitA");
        }
    }
    class fruitB extends fruit
    {
        void show()
        {
            System.out.println("fruitB");
        }
    }
    class drinkA extends drink
    {
        void show()
        {
            System.out.println("drinkA");
        }
    }
    class drinkB extends drink
    {
        void show()
        {
            System.out.println("drinkB");
        }
    }

    结果如下

    image

  • 相关阅读:
    【题解】CF#983 E-NN country
    【题解】CF#403 D-Beautiful Pairs of Numbers
    【题解】CF#285 E-Positions in Permutations
    【题解】FJOI2015火星商店问题
    【题解】Atcoder AGC#01 E-BBQ Hard
    【题解】Atcoder AGC#03 E-Sequential operations on Sequence
    【题解】CF#280 C-Game on Tree
    【题解】CF#833 B-The Bakery
    [BZOJ3600] 没有人的算术 [重量平衡树+权值线段树]
    [bzoj3514][CodeChef GERALD07] Chef ans Graph Queries [LCT+主席树]
  • 原文地址:https://www.cnblogs.com/ives/p/Abstract_Factory.html
Copyright © 2011-2022 走看看