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.
  • 相关阅读:
    EasyUI
    intellij idea打包maven项目
    struts2框架详解
    java电子书
    查看mysql安装路径
    springboot 集成 vue
    C#中的属性
    C#中的时间戳
    int.TryParse非预期执行引发的思考
    IQueryable 和 IEnumerable 的区别
  • 原文地址:https://www.cnblogs.com/student-note/p/6124899.html
Copyright © 2011-2022 走看看