• 工厂模式


    工厂模式分为三种模式,分别为:

    •  简单工厂(Simple Factory)模式:又称静态工厂方法模式(Static Factory Method Pattern)
    • 工厂方法(Factory Method)模式:又称多态性工厂模式(Polymorphic Factory Pattern)或虚拟构造子模式(Virtual Construct Pattern)
    • 抽象工厂(Abstract Factory)模式:又称工具箱模式(Kit或Tookit)

    下面就分别介绍一下这三种设计模式:

    1.  简单工厂模式(Simple Factory):

      简单工厂模式就是由一个工厂类根据传入的参数量,来决定创建哪一种产品类的实例。(仔细理解这句话,非常重要)

    结构图:

     

    上图涉及三个类:

    • 工厂类(Creator):担任工厂模式的核心。工厂类在客户端的调用下直接创建对象,它往往由一个具体类java类实现。
    • 抽象产品类(Product):具体产品类的接口或抽象类。
    • 具体产品类(ConcreteProduct):工厂方法模式所创建的任何角色都是这个角色的实例

    源代码实例:

    抽象产品类(Product):

    Product.java:

    public interface Product {
    }

    具体产品类(ConcreteProduct):

    ConcreteProductA.java:

    public class ConcreteProductA implements Product{
        public ConcreteProductA(){
            System.out.println("具体产品类A");
        }
    }

    ConcreteProductB.java:

    public class ConcreteProductB implements Product{
        public ConcreteProductB(){
            System.out.println("具体产品类B");
        }
    }

    工厂类(Creator):

    Creator.java:

    public class Creator {
        
        public static Product factory(String which){
            if (which.equalsIgnoreCase("ConcreteProductA")) {
                return new ConcreteProductA();
            }else if (which.equalsIgnoreCase("ConcreteProductB")) {
                return new ConcreteProductB();
            }else {
                return null;
            }
        }
    }

    客户端:

    public class Client {
        public static void  main(String[] args){
            Creator creator = new Creator();
            creator.factory("ConcreteProductB");
            creator.factory("ConcreteProductA");
            
        }
    }

    输出:

    具体产品类B
    具体产品类A
    

        2、工厂方法模式(Factory Method)

         工厂方法模式中核心工厂类变为一个抽象类,仅负责给出具体工厂子类必须实现的接口,不再接触哪一个产品类被实例化这种细节。

    结构中成员类和上面差不多,:

    • 抽象工厂类(Creator):为所有具体工厂类提供接口。
    • 具体工厂类(ConcreteCreator):担任这个角色是实现了抽象工厂接口的具体java类,并且受到应用程序的调用来创建产品。
    • 抽象产品(Product)
    • 具体产品(ConcreteProduct)

    抽象方法将某一个产品和一个工厂进行了绑定,这是他与另外两个工厂模式的区别。下面注意看代码:源代码:

    抽象产品(Product):

    public interface Product {
    
    }

     具体产品(ConcreteProduct)类:

    ConcreProductA.java:

    public class ConcreteProductA implements Product{
        public ConcreteProductA(){
            System.out.println("具体产品类A");
        }
    }

    ConcreProductB.java:

    public class ConcreteProductB implements Product{
        public ConcreteProductB(){
            System.out.println("具体产品类B");
        }
    }

    抽象工厂类(Creator):

    Creator.java:

    public interface Creator {
        public Product factory();
    }

    具体工厂类(ConcreteCreator):

    ConcreteCreatorA.java:

    public class ConcreteCreatorA implements Creator{
    
        @Override
        public Product factory() {
            return new ConcreteProductA();
        }
    }

    ConcreteCreatorB.java:

    public class ConcreteCreatorB implements Creator{
        
        @Override
        public Product factory() {
            return new ConcreteProductB();
        }
        
    }

    客户端:

    public class Client {
    
        public static void main(String[] args){
            Creator creatorA = new ConcreteCreatorA();
            creatorA.factory();
            Creator creatorB = new ConcreteCreatorB();
            creatorB.factory();
        }
    }

    输出:

    具体产品类A
    具体产品类B

        3、抽象工厂模式(Abstract Factory)

      抽象工厂模式是对象的创建模式,他是工厂方法模式的进一步扩展。使用抽象工厂模式,可以创建来自不同工厂的各种产品。

    结构图中的角色:

    • 抽象工厂类(Creator)
    • 具体工厂类(ConcreteCreator)
    • 抽象产品(Product)
    • 具体产品(ConcreteProduct)

    源代码:

    抽象产品类(Product):

    ProductA.java

    public interface ProductA {
    }

    ProductB.java

    public interface ProductB {
    }

    具体产品类(ConcreteProduct):

    ProductA1.java

    public class ProductA1 implements ProductA{
        
        public ProductA1(){
            System.out.println("具体产品A1");
        }
    }

    productA2.java、productB1.java、productB2.java与上类似,不在列出。

    抽象工厂类(Creator):

    Creator.java

    public interface Creator {
        
        public ProductA factoryA();
        public ProductB factoryB();
    }

     具体工厂类(ConcreteCreator):

    ConcreteCreator1.java

    public class ConcretCreator1 implements Creator{
    
        public ConcretCreator1(){
            System.out.println("具体工厂1:");
        }
        public ProductA factoryA(){
            return new ProductA1();
        }
        public ProductB factoryB(){
            return new ProductB1();
        }
    
    }

    ConcreteCreator2.java

    public class ConcretCreator2 implements Creator{
    
        public ConcretCreator2(){
            System.out.println("具体工厂2:");
        }
        public ProductA factoryA() {
            return new ProductA2();
        }
    
        public ProductB factoryB() {
            return new ProductB2();
        }
    
    }

     客户端:

    public class client {
        public static void main(String[] args){
            //抽象工厂1
            Creator creator1 = new ConcretCreator1();
            creator1.factoryA();
            creator1.factoryB();
            Creator creator2 = new ConcretCreator2();
            creator2.factoryA();
            creator2.factoryB();
        }
    }

     输出:

    具体工厂1:
    具体产品A1
    具体产品B1
    具体工厂2:
    具体产品A2
    具体产品B2
    
  • 相关阅读:
    如何使用SQL BETWEEN运算符选择指定范围内的值
    如何使用SQL IS NULL和IS NOT NULL运算符
    在Java 中重写equals 和hashCode 时应该考虑哪些问题?
    如何使用SQL NOT运算
    SQL INNER JOIN查询来自两个或多个表的数据
    如何使用SQL IN运算符将列中的值与一组值进行比较
    如何在Java中拆分字符串
    如何使用SQL LIKE运算符来测试表达式是否与模式匹配
    MIT6.830 lab1
    Unity Shader:(九)基础纹理
  • 原文地址:https://www.cnblogs.com/mercuryli/p/5290970.html
Copyright © 2020-2023  润新知