• 创建型模式


    创建型模式抽象了实例化过程。它们帮助一个系统独立于如何创建、组合和表示它的那些对象。

    1.抽象工厂模式(ABSTRACT FACTORY)

    意图

    提供一个创建一系列相关或相互依赖对象的接口,而不需指定他们具体的类。

    (  抽象工厂模式可以向客户端(Client指代码模式的使用者,后文类同)提供一个接口,使得客户端在不必指定产品的具体类型的情况下,创建多个产品族(Product Family指位于不同产品等级中,功能相关联的产品的集合)中的产品对象。)

    结构

     

    using System;
    
    namespace DesignPatterns.Creational
    {
    
        // 测试程序
    
        class MainApp
        {
            public static void Main()
            {
                // 抽象工厂1 
                AbstractFactory factory1 = new ConcreteFactory1();
                Client c1 = new Client(factory1);
                c1.Run();
    
                // 抽象工厂2 
                AbstractFactory factory2 = new ConcreteFactory2();
                Client c2 = new Client(factory2);
                c2.Run();
    
                // 等候用户输入 
                Console.Read();
            }
        }
    
        // 抽象工厂
    
        abstract class AbstractFactory
        {
            public abstract AbstractProductA CreateProductA();
            public abstract AbstractProductB CreateProductB();
        }
    
        // 具体工厂1
    
        class ConcreteFactory1 : AbstractFactory
        {
            public override AbstractProductA CreateProductA()
            {
                return new ProductA1();
            }
            public override AbstractProductB CreateProductB()
            {
                return new ProductB1();
            }
        }
    
        // 具体工厂2
    
        class ConcreteFactory2 : AbstractFactory
        {
            public override AbstractProductA CreateProductA()
            {
                return new ProductA2();
            }
            public override AbstractProductB CreateProductB()
            {
                return new ProductB2();
            }
        }
    
        // 抽象产品A,产品族中一个成员
    
        abstract class AbstractProductA
        {
        }
    
        // 抽象产品B,产品族中一个成员
    
        abstract class AbstractProductB
        {
            public abstract void Interact(AbstractProductA a);
        }
    
        // 具体产品A1
    
        class ProductA1 : AbstractProductA
        {
        }
    
        // 具体产品B1
    
        class ProductB1 : AbstractProductB
        {
            public override void Interact(AbstractProductA a)
            {
                Console.WriteLine(this.GetType().Name +" interacts with " + a.GetType().Name);
            }
        }
    
        // 具体产品A2
    
        class ProductA2 : AbstractProductA
        {
        }
    
        // 具体产品B2
    
        class ProductB2 : AbstractProductB
        {
            public override void Interact(AbstractProductA a)
            {
                Console.WriteLine(this.GetType().Name +
                  " interacts with " + a.GetType().Name);
            }
        }
    
        // 客户端,使用环境
    
        class Client
        {
            private AbstractProductA AbstractProductA;
            private AbstractProductB AbstractProductB;
    
            // 构造,注意通过构造传入抽象工厂
            public Client(AbstractFactory factory)
            {
                AbstractProductB = factory.CreateProductB();
                AbstractProductA = factory.CreateProductA();
            }
    
            public void Run()
            {
                AbstractProductB.Interact(AbstractProductA);
            }
        }
    }

    输出结果为:

    ProductB1 interacts with ProductA1
    ProductB2 interacts with ProductA2

    2.工厂方法模式(FACTORY METHOD)

    意图

    定义一个用于创建对象的接口,让子类决定实例化哪个类。Factory Method 使一个类的实例化延迟到其子类。

    结构

     

    适用性

    在下列情况下可以使用Factory Method 模式:

    1. 当一个类不知道它所必须创建的对象的类的时候;
    2. 当一个类希望由它的子类来指定它所创建的对象的时候;
    3. 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。

    3.单件模式(Singleton Pattern)    我最喜欢用的一个,简单好用

    意图

    保证一个类有且只有一个实例,并提供一个访问它的全局访问点。

    public class Product{
    
    private Product p;
    
    private Product(){
    
    }
    public Product getProduct{
      if(p == null)
        p = new Product();
     
     return p;
    }
    
    }
  • 相关阅读:
    浅浅地聊一下矩阵与线性映射及矩阵的特征值与特征向量
    再谈正态分布或高斯函数
    喜好:
    Deep Residual Learning for Image Recognition这篇文章
    Java并发编程:volatile关键字解析
    mysql decimal(10,2)对应java类型
    各个JSON技术的比较(Jackson,Gson,Fastjson)的对比
    @RequestBody和@RequestParam区别
    Java中的ReentrantLock和synchronized两种锁定机制的对比
    使用Solr索引MySQL数据
  • 原文地址:https://www.cnblogs.com/jycboy/p/5326378.html
Copyright © 2020-2023  润新知