首页 > 其他分享 >创建者模式

创建者模式

时间:2023-11-08 13:33:19浏览次数:29  
标签:创建者 void actor abstract services 模式 override public

创建者模式

是一种复杂对象创建模式,它将客户端与包含多个组成部分的复杂对象的创建过程分离.客户无需知道复杂对象的内部组成部分与装配方式,只需要知道所需要建造者的类型即可.
建造模式关注如何逐步创建 一个复杂对象,不同的具体建造者定义了不同的创建过程,且具体建造者相互独立,更换建造者或增加新的建造非常方便,系统具有较好的扩展性.


//创建者模式
//是一种复杂对象创建模式,它将客户端与包含多个组成部分的复杂对象的创建过程分离.客户无需知道复杂对象的内部组成部分与装配方式,只需要知道所需要建造者的类型即可.
//建造模式关注如何逐步创建 一个复杂对象,不同的具体建造者定义了不同的创建过程,且具体建造者相互独立,更换建造者或增加新的建造非常方便,系统具有较好的扩展性.

//下面有两个盒子,一个涉及到对象的建造,后面一个是涉及对象建造的。

var builder = new Elephent();

builder.Close();


 class Elephent : Builder
{
    protected override void Step1()
    {
        Console.WriteLine("把冰箱门打开");
    }

    protected override void Step2()
    {
        Console.WriteLine("把大象装进冰箱");

    }

    protected override void Step3()
    {
        Console.WriteLine("把冰箱门关上");

    }
}
abstract class Builder
{
    protected abstract void Step1();
    protected abstract void Step2();
    protected abstract void Step3();
    public void Close()
    {
        Step1();
        Step2();
        Step3();
    }
}

下面涉及到对象的建造

//顶级语句




using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;


//IHost host = Host.CreateDefaultBuilder()
//    .ConfigureServices(services =>
//    {
//        services.AddSingleton<ActorController>();
//        services.AddSingleton<ActorBuilder, HeroBuilder>();
//        // services.AddSingleton<ActorBuilder, AngeBuilder>();

//        services.AddSingleton<Actor>();
//    })
//    .Build();
//ActorController actorController= host.Services.GetRequiredService<ActorController>();
//var actor=actorController.Bluid();

IServiceCollection services = new ServiceCollection();
services.AddSingleton<ActorBuilder, AngeBuilder>();
services.AddSingleton<ActorController>();
services.AddSingleton<Actor>();

ServiceProvider serviceProvider = services.BuildServiceProvider();

ActorController actorController = serviceProvider.GetRequiredService<ActorController>();
var actor = actorController.Bluid();



Console.WriteLine($"角色:{actor.type}");
Console.WriteLine($"性别:{actor.Sex}");
Console.WriteLine($"面容:{actor.Face}");
Console.WriteLine($"服装:{actor.Costume}");
Console.WriteLine($"发型:{actor.Hairstyle}");


/// <summary>
/// 英雄角色建造者
/// </summary>
class HeroBuilder : ActorBuilder
{
    public HeroBuilder(Actor actor) : base(actor)
    {
    }

    public override void BuilderCostume()
    {
        _actor.type = "英雄";
    }

    public override void BuilderFace()
    {
        _actor.Sex = "男";
    }

    public override void BuilderHairstyle()
    {
        _actor.Face = "英俊";
    }

    public override void BuilderSex()
    {
        _actor.Costume = "盔甲";
    }

    public override void BuilderType()
    {
        _actor.Hairstyle = "飘逸";
    }
}

/// <summary>
/// 天使角色建造者
/// </summary>
class AngeBuilder : ActorBuilder
{
    public AngeBuilder(Actor actor) : base(actor)
    {
    }

    public override void BuilderCostume()
    {
        _actor.type = "天使";
    }

    public override void BuilderFace()
    {
        _actor.Sex = "女";
    }

    public override void BuilderHairstyle()
    {
        _actor.Face = "漂亮";
    }

    public override void BuilderSex()
    {
        _actor.Costume = "白袍";
    }

    public override void BuilderType()
    {
        _actor.Hairstyle = "披肩长发";
    }


}

public class Actor
{
    /// <summary>
    /// 角色类型
    /// </summary>
    public string type { get; set; }
    /// <summary>
    /// 性别
    /// </summary>
    public string Sex { get; set; }
    /// <summary>
    /// 面容
    /// </summary>
    public string Face { get; set; }
    //服装
    public string Costume { get; set; }
    /// <summary>
    /// 发型
    /// </summary>
    public string Hairstyle { get; set; }

}

abstract class ActorBuilder
{
    protected Actor _actor;
    protected ActorBuilder(Actor actor)
    {
        _actor = actor;
    }
    abstract public void BuilderType();
    abstract public void BuilderSex();
    abstract public void BuilderFace();
    abstract public void BuilderCostume();
    abstract public void BuilderHairstyle();

    public Actor CreateActor()
    {
        return _actor;
    }
}

class ActorController
{
    private readonly ActorBuilder _builder;

    public ActorController(ActorBuilder actorBuilder)
    {
        _builder = actorBuilder;

    }
    public Actor Bluid()
    {
        _builder.BuilderType();
        _builder.BuilderSex();
        _builder.BuilderFace();
        _builder.BuilderCostume();
        _builder.BuilderHairstyle();
        return _builder.CreateActor();
    }
}

标签:创建者,void,actor,abstract,services,模式,override,public
From: https://www.cnblogs.com/bcd589/p/17817180.html

相关文章

  • Java的设计模式之工厂模式
    在软件设计中,我们经常遇到需要创建不同类型对象的情况,但是如果直接在代码中实例化对象,会使代码紧密耦合在一起,难以维护和拓展,此外,如果对象的创建方式需要变化,那么就需要再整个代码中进行大量的修改。工厂模式旨在解决这个问题。工厂模式提供了一个创建对象的接口,但是将具体的对象创......
  • 详解 Calico 三种模式(与 Fannel 网络对比学习)
    1.概述Calico是一个基于BGP的纯三层网络方案。它在每个计算节点都利用Linuxkernel实现了一个高效的虚拟路由器vRouter来进行数据转发。每个vRouter都通过BGP协议将本节点上运行容器的路由信息向整个Calico网络广播,并自动设置到达其他节点的路由转发规则。Calico保......
  • React学习笔记22-订阅发布模式
    1.订阅发布模式的定义订阅发布模式简单来说就是订阅者进行订阅,发布者进行发布,发布者发布时会通过调度中心通知到每一个订阅者。订阅者根据发布的内容选择是否进行对应的操作。2.实现一个最简单的订阅发布订阅发布模式的核心就是调度中心。一个最简单的调度中心里面应该具有三个......
  • Seata分布式事务框架-AT模式与TCC模式介绍
    SeataAT事务方案Seata的AT模式(AutomaticTransaction)是一种无侵入的分布式事务解决方案。下面结合具体业务场景来分析其执行的原理。业务场景订单系统当用户下订单时,执行以下三步流程:订单系统保存订单订单系统调用库存服务,减少商品库存订单系统调用账户服务,扣减用户金额......
  • 软件设计实验8:适配器模式
    实验8:适配器模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解适配器模式的动机,掌握该模式的结构;2、能够利用适配器模式解决实际问题。 [实验任务一]:双向适配器实现一个双向适配器,使得猫可以学狗叫,狗可以学猫抓老鼠。实验要求:1. 画出对应的类图; 2.......
  • 软件设计实验9:桥接模式
    实验9:桥接模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解桥接模式的动机,掌握该模式的结构;2、能够利用桥接模式解决实际问题。 [实验任务一]:两个维度的桥接模式用桥接模式实现在路上开车这个问题,其中,车可以是car或bus,路可以是水泥路或沥青路。实验要求......
  • 前端常用设计模式
    什么是设计模式?​设计模式(Designpattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,设计模式并不是一种固定的公式,而是一种思想,是一种解决问题的思路;使用设计模式是为了可重用代码,让代码更容易被他人理解,保证代码可维护性。设计模式不区分编......
  • 每日随笔——简单工厂模式
    [实验任务一]:女娲造人使用简单工厂模式模拟女娲(Nvwa)造人(Person),如果传入参数M,则返回一个Man对象,如果传入参数W,则返回一个Woman对象,如果传入参数R,则返回一个Robot对象。请用程序设计实现上述场景。实验要求:1.画出对应的类图;2.提交源代码;3.注意编程规范。类图: 源代码:......
  • 设计模式-工厂模式
    工厂模式是用来封装对象的创建。工厂模式有三种,它们分别是简单工厂模式,工厂方法模式以及抽象工厂模式,通常我们所说的工厂模式指的是工厂方法模式。下面分别介绍下这三种工厂模式。简单工厂模式简单工厂模式的定义:定义一个工厂类,根据传入的参数不同返回不同的实例,被创建的实例具有共......
  • 跟安卓官网开始学习新的架构模式(MVI)
    #首先:大家可以看下官网的简介:应用架构指南 | Android开发者 | AndroidDevelopers(google.cn)###再说下其他架构模式:一.mvcMVC的目的就是为了M和V代码分离,降低耦合性。Model:数据来源,网络请求数据和数据库数据。View:对应xml布局文件和动态的布局部分。Controller:逻辑控制部......