zoukankan      html  css  js  c++  java
  • 建造者模式-C#改良实现

    区分网上已有的一般建造者模式实现,个人觉得实现太单一了,自己google查了一些好的实现,挑了其中比较适合的,做个笔记。

        # region 标准Builder模式实现
    
        // 产品
        class Television
        {
            public string Code { get; set; }
            public string DisplayTechnology { get; set; }
            public string HDFormat { get; set; }
            public string ScreenType { get; set; }
            public string Size { get; set; }
            public string Feature { get; set; }
        }
    
        // 抽象Builer
        abstract class TelevisionBuilder{
            protected Television television;
    
            public abstract void SetCode();//ProductCode
            public abstract void SetDisplayTechnology(); //LCD, LED, OLED, Plasma, CRT
            public abstract void SetHDFormat(); // Full HD, HD Ready, Ultra HD, None
            public abstract void SetScreenType(); //Curved, Flat, Standard
            public abstract void SetSize(); // 22, 32, 40, 42, 54
            public abstract void SetFeature(); //3D, Smart, Standard , HDMI Ports, USB Ports, Built in WIFI, Ethernet, Remote
     
            //获取产品
            public Television Television { get => television; }
        }
    
        // 具体Builder(具体实现1)
        class FullHD40TVBuilder : TelevisionBuilder
        {
            public FullHD40TVBuilder() => television = new Television();
    
            public override void SetCode() => television.Code = "FullHD40TV";
    
            public override void SetDisplayTechnology() => television.DisplayTechnology = "LCD";
    
            public override void SetHDFormat() => television.HDFormat = "FullHD";
    
            public override void SetScreenType() => television.ScreenType = "Flat";
    
            public override void SetSize() => television.Size = "40";
    
            public override void SetFeature() => television.Feature = "1 HDMI Ports, 1 USB Ports, Remote";
        }
    
        // 具体Builder(具体实现2)
        class SMARTLED54TVBuilder : TelevisionBuilder
        {
            public SMARTLED54TVBuilder() => television = new Television();
    
            public override void SetCode() => television.Code = "SMARTLED54TV";
    
            public override void SetDisplayTechnology() => television.DisplayTechnology = "LED";
    
            public override void SetHDFormat() => television.HDFormat = "FullHD";
    
            public override void SetScreenType() => television.ScreenType = "Flat";
    
            public override void SetSize() => television.Size = "54";
    
            public override void SetFeature() => television.Feature = "2 HDMI Ports, 2 USB Ports, Built in WIFI, Ethernet, Remote";
        }
        
        // 环境角色(解耦作用)
        class TelevisionContext {
            public void Construction(TelevisionBuilder builder)
            {
                builder.SetCode();
                builder.SetDisplayTechnology();
                builder.SetFeature();
                builder.SetHDFormat();
                builder.SetScreenType();
                builder.SetSize();
            }
    
        }
    
        #endregion
        
        // 在客户端调用:
        var builder1 = new SMARTLED54TVBuilder();
        var builder2 = new FullHD40TVBuilder();
        var ctx = new TelevisionContext();
        ctx.Construction(builder1);
        ctx.Construction(builder2);
    
        var product1 = builder1.Television;
        var product2 = builder2.Television;
        Console.WriteLine($"产品1生产完成,详细:{JsonConvert.SerializeObject(product1)}");
        Console.WriteLine($"产品2生产完成,详细:{JsonConvert.SerializeObject(product2)}");
        
    

    相比较来讲,这个实现更细致,而且充分利用了C#的基本语法,并没有额外在创建一个函数返回产品,相对更简洁更"高大上",哈哈....

  • 相关阅读:
    Maven pom.xml中的元素modules、parent、properties以及import
    基于SpringBoot搭建应用开发框架(一) —— 基础架构
    Spring Boot项目使用Eclipse进行断点调试Debug
    eclipse 运行springboot项目
    如何在eclipse中使用mvn clean install
    https://www.cnblogs.com/zy-jiayou/p/7661415.html
    SpringBoot系列三:SpringBoot基本概念(统一父 pom 管理、SpringBoot 代码测试、启动注解分析、配置访问路径、使用内置对象、项目打包发布)
    WebJars are client-side web libraries (e.g. jQuery & Bootstrap) packaged into JAR (Java Archive) files
    在EF中使用Expression自动生成p=>new Entity(){X="",Y="",..}格式的Lambda表达式灵活实现按需更新
    EF跨库查询,DataBaseFirst下的解决方案
  • 原文地址:https://www.cnblogs.com/zhiyong-ITNote/p/10869240.html
Copyright © 2011-2022 走看看