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

       单一职责原则

        定义:不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。 

       里氏替换原则

        定义:所有引用基类的地方必须能透明地使用其子类的对象。

       依赖倒置原则

        定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。

       接口隔离原则

        定义:客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。 

       迪米特法则

        定义:一个对象应该对其他对象保持最少的了解。

       开闭原则

        定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。

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

         下面就以生活中 “绝味” 连锁店的例子来实现一个抽象工厂模式。例如,绝味鸭脖想在江西南昌和上海开分店,但是由于当地人的口味不一样,

        在南昌的所有绝味的东西会做的辣一点,而上海不喜欢吃辣的,所以上海的所有绝味的东西都不会做的像南昌的那样辣,

        然而这点不同导致南昌绝味工厂和上海的绝味工厂生成所有绝味的产品都不同,也就是某个具体工厂需要负责一系列产品(指的是绝味所有食物)的创建工作,

        下面就具体看看如何使用抽象工厂模式来实现这种情况。

          创建抽象工厂模式的前提就是每个工厂生产的东西是一样的

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                CongQing c = new CongQing();
                c.YaBo().Create();
                Console.Read();
            }
        }
        abstract class YaBo
        {
            public abstract void Create();
        }
        abstract class YaJiao
        {
            public abstract void Create();
        }
        class CongQingYaBo : YaBo
        {
            public override void Create()
            {
                Console.WriteLine("重庆的鸭脖子有点辣.0.");
            }
        }
        class CongQingYaJiao :YaJiao
        {
            public override void Create()
            {
                Console.WriteLine("重庆的鸭脚有点辣.0.");
            }
        }
        abstract class Factory
        {
            public abstract YaBo YaBo();//鸭脖
            public abstract YaJiao YaJiao();//鸭脚
        }
        class CongQing:Factory
        {
            public override YaBo YaBo()
            {
                return new CongQingYaBo();
            }
            public override YaJiao YaJiao()
            {
                return new CongQingYaJiao();
            }
        }
    }
    Hold on, everything is possible.
  • 相关阅读:
    leetcode-788-Rotated Digits(使用vector替代if else的逐个判断)
    leetcode-771-Jewels and Stones(建立哈希表,降低时间复杂度)
    leetcode-766-Toeplitz Matrix(每一条对角线元素的比较)
    leetcode-762-Prime Number of Set Bits in Binary Representation
    leetcode-747-Largest Number At Least Twice of Others(求vector的最大值和次大值)
    Flink中逻辑计划和物理计划的概念划分和对应关系
    Java线程池中线程的生命周期
    在ServletFilter层返回多字段提示给前端
    JavaBIO利用装饰器模式来组织和扩展接口
    SparkShuffle机制
  • 原文地址:https://www.cnblogs.com/student-note/p/6124899.html
Copyright © 2011-2022 走看看