zoukankan      html  css  js  c++  java
  • 简单工厂 ----

    简单工厂模式

        简单工厂模式(Simple Factory Pattern)属于类的创新型模式,又叫静态工厂方法模式(Static FactoryMethod Pattern),是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

     简单工厂模式中包含的角色及其相应的职责如下:

           工厂角色(Creator):这是简单工厂模式的核心,由它负责创建所有的类的内部逻辑。当然工厂类必须能够被外界调用,创建所需要的产品对象。

           抽象(Product)产品角色:简单工厂模式所创建的所有对象的父类,注意,这里的父类可以是接口也可以是抽象类,它负责描述所有实例所共有的公共接口。

           具体产品(Concrete Product)角色:简单工厂所创建的具体实例对象,这些具体的产品往往都拥有共同的父类。

    简单工厂模式深入分析

           简单工厂模式解决的问题是如何去实例化一个合适的对象。

           简单工厂模式的核心思想就是:有一个专门的类来负责创建实例的过程。

           具体来说,把产品看着是一系列的类的集合,这些类是由某个抽象类或者接口派生出来的一个对象树。而工厂类用来产生一个合适的对象来满足客户的要求。

           如果简单工厂模式所涉及到的具体产品之间没有共同的逻辑,那么我们就可以使用接口来扮演抽象产品的角色;如果具体产品之间有功能的逻辑或,我们就必须把这些共同的东西提取出来,放在一个抽象类中,然后让具体产品继承抽象类。为实现更好复用的目的,共同的东西总是应该抽象出来的。

     简单工厂示例:

     1.创建产品的抽象接口

       

    public interface food{
    
         public void getFoot();
    
    }
    

    2.建立具体的产品

    public class McChicken :Food{
    
    
       public override void get(){
    
         Console.writeLine("炸鸡");
    
        }
    
    
    }
    

     

    public class Chips:Food{
        /*
         * 获取一份薯条
         */
        public void get(){
            System.out.println("我要一份薯条");
        }
    }

     

    3.现在建立一个食物加工工厂:

      

    public class FoodFactory {
     
        public static Food getFood(String type)  {
            if(type.equalsIgnoreCase("mcchicken")) {
                return McChicken.class.newInstance();
     
            } else if(type.equalsIgnoreCase("chips")) {
                return Chips.class.newInstance();
            } else {
                System.out.println("哎呀!找不到相应的实例化类啦!");
                return null;
            }
     
    

      

    4.测试

    public class SimpleFactoryTest {
        public static void main(String[] args)  {
     
            //实例化各种食物
            Food mcChicken = FoodFactory.getFood("McChicken");
            Food chips = FoodFactory.getFood("Chips");
            Food eggs = FoodFactory.getFood("Eggs");
     
            //获取食物
            if(mcChicken!=null){
                mcChicken.get();
            }
            if(chips!=null){
                chips.get();
            }
            if(eggs!=null){
                eggs.get();
            }
     
     
        }
    

      

    简单工厂模式的优缺点分析: 

           优点:工厂类是整个模式的关键所在。它包含必要的判断逻辑,能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。用户在使用时可以直接根据工厂类去创建所需的实例,而无需了解这些对象是如何创建以及如何组织的。有利于整个软件体系结构的优化。

          缺点:由于工厂类集中了所有实例的创建逻辑,这就直接导致一旦这个工厂出了问题,所有的客户端都会受到牵连;而且由于简单工厂模式的产品室基于一个共同的抽象类或者接口,这样一来,但产品的种类增加的时候,即有不同的产品接口或者抽象类的时候,工厂类就需要判断何时创建何种种类的产品,这就和创建何种种类产品的产品相互混淆在了一起,违背了单一职责,导致系统丧失灵活性和可维护性。而且更重要的是,简单工厂模式违背了“开放封闭原则”,就是违背了“系统对扩展开放,对修改关闭”的原则,因为当我新增加一个产品的时候必须修改工厂类,相应的工厂类就需要重新编译一遍。

          总结一下:简单工厂模式分离产品的创建者和消费者,有利于软件系统结构的优化;但是由于一切逻辑都集中在一个工厂类中,导致了没有很高的内聚性,同时也违背了“开放封闭原则”。另外,简单工厂模式的方法一般都是静态的,而静态工厂方法是无法让子类继承的,因此,简单工厂模式无法形成基于基类的继承树结构。

  • 相关阅读:
    leetcode 131. Palindrome Partitioning
    leetcode 526. Beautiful Arrangement
    poj 1852 Ants
    leetcode 1219. Path with Maximum Gold
    leetcode 66. Plus One
    leetcode 43. Multiply Strings
    pytorch中torch.narrow()函数
    pytorch中的torch.repeat()函数与numpy.tile()
    leetcode 1051. Height Checker
    leetcode 561. Array Partition I
  • 原文地址:https://www.cnblogs.com/zhangyu0217----/p/6598437.html
Copyright © 2011-2022 走看看