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

    工厂模式

    简单工厂

    通过参数动态创建继承自同一接口的类。

    public class ShapeFactory {
        
       //使用 getShape 方法获取形状类型的对象
       public Shape getShape(String shapeType){
          if(shapeType == null){
             return null;
          }        
          if(shapeType.equalsIgnoreCase("CIRCLE")){
             return new Circle();
          } else if(shapeType.equalsIgnoreCase("RECTANGLE")){
             return new Rectangle();
          } else if(shapeType.equalsIgnoreCase("SQUARE")){
             return new Square();
          }
          return null;
       }
    }

    工厂方法

    定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。让其子类实现工厂接口,返回的也是一个抽象的产品。

    public class CircleShapeFactory implement ShapeFactory {
       //使用 getShape 方法获取形状类型的对象
       public Shape getShape(){
          return new Circle();
       }
    }
    
    public class RectShapeFactory implement ShapeFactory {
       //使用 getShape 方法获取形状类型的对象
       public Shape getShape(){
          return new Rectangle();
       }
    }

    抽象工厂

    围绕一个超级工厂创建其他工厂。

    public class JinanPieFactory extends AbstractPieFactory {
       @Override
       public Pie makeApplePie(){
             return new SweetApplePie();
       }
       
       @Override
       public Pie makeBananaPie() {
          return new SweetBananaPie();
       }
    }
    
    public class YueyangPieFactory extends AbstractPieFactory {
       @Override
       public Pie makeApplePie(){
             return new XianApplePie();
       }
       
       @Override
       public Pie makeBananaPie() {
          return new XianBananaPie();
       }
    }
    
    public class FactoryProducer {
       public static AbstractPieFactory getFactory(String choice){
          if(choice.equalsIgnoreCase("JINAN")){
             return new JinanPieFactory();
          } else if(choice.equalsIgnoreCase("YUEYANG")){
             return new YueyangPieFactory();
          }
          return null;
       }
    }
  • 相关阅读:
    Windows 认证小结
    Linux 提权学习小结
    ssrf与gopher与redis
    hacker101 CTF 学习记录(二)
    Hacker101 CTF 学习记录(一)
    libwebsockets支持外部eventloop变更
    ypipe, zmq的核心部件,并行读写的管道。
    std::regex与boost::regex的性能差5倍,有profile有真相。
    Spring整合WebSocket
    温故知新——Spring AOP(二)
  • 原文地址:https://www.cnblogs.com/aaroncnblogs/p/8609161.html
Copyright © 2011-2022 走看看