首页 > 其他分享 >05_建造者模式

05_建造者模式

时间:2024-03-09 10:22:20浏览次数:27  
标签:builder set 05 void get 建造 模式 Phone public

建造者模式是一种创建型设计模式,旨在让你能够创建复杂对象,而无需直接在应用程序中指定其具体类型。通过建造者模式,你可以将对象的构建过程和表示分离,从而使相同的构建过程可以创建不同表示形式的对象。这种模式通常包括以下几个关键组件:

  1. 产品(Product):最终要创建的复杂对象。

  2. 抽象建造者(Builder):声明了用于创建产品各个部件的方法接口。

  3. 具体建造者(Concrete Builder):实现了抽象建造者接口,负责实际构建产品的各个部件。

  4. 指挥者(Director):构建一个使用Builder接口的对象,负责按照一定顺序构建产品。

在使用建造者模式时,通常创建一个指挥者对象,然后将具体建造者对象传给指挥者,指挥者按照特定顺序调用建造者的方法来构建产品。这种模式的优势在于能够方便地构建复杂对象,同时将构建过程与表示分离,提高了灵活性和可维护性。

Product:

/// <summary>
    /// 手机接口
    /// </summary>
    public interface IPhone
    {
        /// <summary>
        /// 名称
        /// </summary>
        string Name { get; set; }    
        /// <summary>
        /// CPU
        /// </summary>
        string CPU { get; set; }
        /// <summary>
        /// 屏幕
        /// </summary>
        string Screen { get; set; }
        /// <summary>
        /// 内存
        /// </summary>
        string Memory { get; set; }
        /// <summary>
        /// 相机
        /// </summary>
        string Camera { get; set; }
        /// <summary>
        /// 电池
        /// </summary>
        string Battery { get; set; }
    }

苹果手机

public class ApplePhone : IPhone
    {
        /// <summary>
        /// 手机名称
        /// </summary>
        public string Name { get; set; } = "IPhone";
        /// <summary>
        /// CPU
        /// </summary>
        public string CPU { get; set; }
        /// <summary>
        /// 手机屏幕
        /// </summary>
        public string Screen { get; set; }
        /// <summary>
        /// 手机内存
        /// </summary>
        public string Memory { get; set; }
        /// <summary>
        /// 手机摄像头
        /// </summary>
        public string Camera { get; set; }
        /// <summary>
        /// 手机电池
        /// </summary>
        public string Battery { get; set; }
    }

三星手机

 public class SamsungPhone : IPhone
    {
        /// <summary>
        /// 手机名称,默认三星手机
        /// </summary>
        public string Name { get; set; } = "SamsungPhone";
        /// <summary>
        /// CPU
        /// </summary>
        public string CPU { get; set; }
        /// <summary>
        /// 手机屏幕
        /// </summary>
        public string Screen { get; set; }
        /// <summary>
        /// 手机内存
        /// </summary>
        public string Memory { get; set; }
        /// <summary>
        /// 手机摄像头
        /// </summary>
        public string Camera { get; set; }
        /// <summary>
        /// 手机电池
        /// </summary>
        public string Battery { get; set; }
    }

 

Builder

抽象建造者可以用接口和抽象类。

接口方式:

public interface IBuilder
    {
        /// <summary>
        /// 手机
        /// </summary>
        IPhone Phone { get; set; }
        /// <summary>
        /// CPU
        /// </summary>
        void BuildCPU();
        /// <summary>
        /// 屏幕
        /// </summary>
        void BuildScreen();
        /// <summary>
        /// 内存
        /// </summary>
        void BuildMemory();
        /// <summary>
        /// 摄像头
        /// </summary>
        void BuildCamera();
        /// <summary>
        /// 电池
        /// </summary>
        void BuildBattery();
        /// <summary>
        /// 建构方法
        /// </summary>
        /// <returns></returns>
        IPhone GetPhone();

    }

抽象类方式:

public abstract class Builder
    {
        /// <summary>
        /// 手机
        /// </summary>
        protected IPhone Phone { get; set; }
        /// <summary>
        /// CPU
        /// </summary>
        public abstract void BuildCPU();
        /// <summary>
        /// 屏幕
        /// </summary>
        public abstract void BuildScreen();
        /// <summary>
        /// 内存
        /// </summary>
        public abstract void BuildMemory();
        /// <summary>
        /// 摄像头
        /// </summary>
        public abstract void BuildCamera();
        /// <summary>
        /// 电池
        /// </summary>
        public abstract void BuildBattery();
        /// <summary>
        /// 建构方法
        /// </summary>
        /// <returns></returns>
        public IPhone GetPhone()
        {
            return Phone;
        }
    }

 

Concrete Builder

建构苹果手机第一代

public class Iphone1Builder : IBuilder
    {
        /// <summary>
        /// 苹果手机
        /// </summary>
        public IPhone Phone { get; set; } = new ApplePhone();

        public void BuildBattery()
        {
            Phone.Battery = "电池 内置1030毫安锂电池 ";
        }

        public void BuildCamera()
        {
            Phone.Camera = "摄像头 后置200万像素,无前置摄像头";
        }

        public void BuildCPU()
        {
            Phone.CPU = "芯片 三星S5L8900  ";
        }

        public void BuildMemory()
        {
            Phone.Memory = "存储 128MB+4G/8G/16G ";
        }

        public void BuildScreen()
        {
            Phone.Screen = "屏幕 3.5英寸多点触控显示屏";
        }

        public IPhone GetPhone()
        {
            return Phone;
        }
    }

建构苹果手机第15代

 public class Iphone15Builder : IBuilder
    {
        public IPhone Phone { get; set; } = new ApplePhone();

        public void BuildBattery()
        {
            Phone.Battery = "电池 3349mAh锂电池 ";
        }

        public void BuildCamera()
        {
            Phone.Camera = "摄像头 后置4800W像素,前置1200W摄像头";
        }

        public void BuildCPU()
        {
            Phone.CPU = "芯片 A16仿生芯片,16核神经引擎,5核GPU、6核CPU  ";
        }

        public void BuildMemory()
        {
            Phone.Memory = "存储 2G+128G/256G/512G  ";
        }

        public void BuildScreen()
        {
            Phone.Screen = "屏幕 6.1英寸多点触控显示屏 ";
        }

        public IPhone GetPhone()
        {
            return Phone;
        }
    }

建构三星手机

 public class GalaxyS24Builder : Builder
    {
        public GalaxyS24Builder() 
        {
            base.Phone = new SamsungPhone();
        }
        public override void BuildBattery()
        {
            Phone.Battery = "电池:6000mAh";
        }

        public override void BuildCamera()
        {
            Phone.Camera = "摄像头:后置10000W像素";
        }

        public override void BuildCPU()
        {
            Phone.CPU = "芯片:66核CPU";
        }

        public override void BuildMemory()
        {
            Phone.Memory= "存储:16G+1024G";
        }

        public override void BuildScreen()
        {
            Phone.Screen= "屏幕:8.5英寸";
        }
    }

 

Director

/// <summary>
    /// 指挥官 或 导演 ,作用是指挥 Builder 去建构具体的手机
    /// </summary>
    public class Director
    {
        private Builder Builder;
        private IBuilder builder;

        public Director(IBuilder builder)
        {
            this.builder = builder;
        }

        public Director(Builder builder)
        {
            this.Builder = builder;
        }

        public IPhone DoWork(IBuilder _builder = null)
        {
            if (_builder != null)
            {
                this.builder = _builder;
            }

            builder.BuildBattery();
            builder.BuildCamera();
            builder.BuildCPU();
            builder.BuildMemory();
            builder.BuildScreen();

            return builder.GetPhone();

        }


        public IPhone DoBuild(Builder _builder = null)
        {
            if (_builder != null)
            {
                this.Builder = _builder;
            }

            Builder.BuildBattery();
            Builder.BuildCamera();
            Builder.BuildCPU();
            Builder.BuildMemory();
            Builder.BuildScreen();

            return Builder.GetPhone();

        }
    }

 

调用

public class Client
    {
        public void Start()
        {
            Console.WriteLine($"2007年开始生产第一台苹果手机");
            IBuilder builder = new Iphone1Builder();//builder负责组装iphone1手机
            Director director = new Director(builder);//director指挥builder干活儿
            IPhone phone = director.DoWork();
            DoStuff(phone);

            Console.WriteLine("2023年苹果发布了IPhone15");
            director.DoWork(new Iphone15Builder());
            DoStuff(director.DoWork());

            Console.WriteLine("同年三星发布了GalaxyS24手机");
            director= new Director(new GalaxyS24Builder());
            DoStuff(director.DoBuild());

        }

        private void DoStuff(IPhone phone)
        {
            Console.WriteLine(phone.Name);
            Console.WriteLine(phone.CPU);
            Console.WriteLine(phone.Screen);
            Console.WriteLine(phone.Memory);
            Console.WriteLine(phone.Battery);
            Console.WriteLine(phone.Camera);
        }
    }
static void Main(string[] args)
        {
            new Client().Start();

            Console.ReadKey();

        }

 

标签:builder,set,05,void,get,建造,模式,Phone,public
From: https://www.cnblogs.com/MingQiu/p/18062327

相关文章

  • Go语言实现设计模式之命令模式
    摘要:命令模式是一种常用的设计模式,它将请求封装成对象,从而使请求的发送者和接收者解耦。本文将详细介绍命令模式的概念和原理,并使用Go语言实现一个示例,以帮助读者更好地理解该设计模式的应用。引言:在软件开发中,命令模式是一种常见的设计模式,它可以帮助我们将请求的发送者和接收......
  • Pod实现机制与设计模式
    每个Pod都有一个特殊的被称为"根容器"的Pause容器(Pause容器,又叫Infrastructure容器)。Pause容器对应的镜像属于Kubernetes平台的一部分,除了Pause容器,每个Pod还包含一个或者多个紧密相关的用户业务容器。 众所周知,容器之间是通过Namespace隔离的,Pod要想解决上述应用场景,那么......
  • 原型模式解析
    本文是什么在前段时间学习了一些设计模式,里面的一些内容还是需要去值得思考的。其中有一种创建型模式叫做原型模式。在之前看的一些文章中,单例模式写的和拷贝构造函数差不多。但经过几天的思考,感觉还是和拷贝构造函数有着明显的区别,故写下此文表达我的想法。如果有不同的思考,可以......
  • 【2024-03-05】分析矛盾
    20:00黄师塔前江水东,春光懒困倚微风。桃花一簇开无主,可爱深红爱浅红?                                                 ——《江畔独步寻花·其五》唐·杜甫今天下午约......
  • 软件工程开发模式
    软件工程开发模式有多种,以下是一些常见的模式:瀑布模型(WaterfallModel):这是一种线性的软件开发过程,它按照一系列有序的阶段进行,每个阶段都有明确的任务和输出。在瀑布模型中,设计、需求分析、编码、测试和部署等阶段是顺序进行的,每个阶段完成后才能进入下一个阶段。迭代模型(Iter......
  • 05盒子模型
    1<!DOCTYPEhtml>2<htmllang="en">3<head>4<metacharset="UTF-8">5<metaname="viewport"content="width=device-width,initial-scale=1.0">6<title>Document......
  • P2055 [ZJOI2009] 假期的宿舍
    原题链接题解这种让来让去让我想到了二分图!!注意细节!!剩余的就是模拟了code#include<bits/stdc++.h>usingnamespacestd;intstu[55],gohome[55],know[55][55];intn;intbelong[55]={0};intvis[55]={0};intsettle(intnow){if(vis[now])return0;vis[now]......
  • 04_抽象工厂模式
        抽象工厂模式是一种创建型设计模式,它提供一个接口用于创建一系列相关或相互依赖对象的工厂,而不需要指定具体的类。这种模式通过提供一个抽象的工厂接口,使得客户端可以创建一系列产品对象而无需关心具体的实现细节。    在抽象工厂模式中,通常会定义一个抽象工......
  • 03_工厂方法模式
    工厂方法模式是一种创建型设计模式,用于定义一个创建对象的接口,但将实际创建对象的工作延迟到子类中。这样可以使一个类的实例化延迟到其子类中,从而实现解耦和灵活性。在工厂方法模式中,通常包含以下几个角色:抽象工厂(Creator):定义创建对象的接口,通常包含一个抽象的工厂方法,由子类......
  • 锂电池电源转换利器:PW2053芯片,实现3.7V转3V/2.5V/1.2V低功耗转换
    在现代电子设备领域,高效、稳定的电源管理对于设备的性能和寿命至关重要。特别是在锂电池供电的应用中,选择一款性能卓越的降压调节器显得尤为关键。今天,我们将向您介绍一款备受赞誉的高效同步降压调节器——PW2053。这款调节器凭借其出色的性能和广泛的应用领域,在电源管理领域独领......