95992828九五至尊2

882828九五至尊手机版大致工厂形式

三月 9th, 2019  |  882828九五至尊手机版

简单易行工厂形式介绍:

不难工厂情势介绍:

大致工厂格局是属于创制型形式,又称作静态工厂方法(Static Factory
Method)情势,但不属于23种GOF设计方式之一。不难工厂方式是由一个工厂对象说了算创建出哪类产品类的实例。简单工厂情势是工厂格局家族中最简单易行实用的情势,能够知道为是见仁见智工厂格局的一个特殊达成。

简单工厂方式是属于创设型情势,又称为静态工厂方法(Static Factory
Method)形式,但不属于23种GOF设计方式之一。简单工厂形式是由二个厂子对象说了算创办出哪种产品类的实例。不难工厂格局是工厂方式家族中最简便易行实用的格局,能够领略为是见仁见智工厂形式的二个卓殊完毕。

结构情势图:

布局情势图:

882828九五至尊手机版 1

882828九五至尊手机版 2

剧中人物分类:

882828九五至尊手机版,剧中人物分类:

工厂(Creator)角色

工厂(Creator)角色

简短工厂方式的主题,它承受贯彻创设全部实例的里边逻辑。工厂类的创始产品类的章程能够被外面直接调用,创造所需的出品对象。

简言之工厂情势的主导,它承担贯彻创造全体实例的当中逻辑。工厂类的创制产品类的措施能够被外面直接调用,创设所需的出品对象。

架空产品(Product)剧中人物

虚幻产品(Product)角色

简单的讲工厂方式所创立的保有指标的父类,它担负描述全体实例所共有的国有接口。

简单易行工厂形式所创办的装有指标的父类,它肩负描述全数实例所共有的公共接口。

切实产品(Concrete Product)角色

切切实实产品(Concrete Product)剧中人物

是简约工厂形式的创始指标,全部创制的对象都以充当这些剧中人物的某部具体类的实例。

是简约工厂格局的始建指标,全部创制的靶子都以担任那个角色的某些具体类的实例。

引入实际处境:

引入真实意况:

假若有3个每户管理类别,里面包车型大巴住家类型是可变的,每一个租户类型的租金总计公式都存在差距

只要有2个住家管理体系,里面包车型大巴居家类型是可变的,每一种租户类型的租金总计公式都存在差异

A类型的每户租金额=天数*单价+绩效*0.005

A类型的居家租金额=天数*单价+绩效*0.005

B类型的人家租金额=月份*(每月价格+performance*0.001)

B类型的居家租金额=月份*(每月价格+performance*0.001)

分析:

分析:

1.
合营社存在共有的计量办法,那是实体公司的一举一动,不过他们的一颦一笑的办法不均等,全数我们抽象商店类,代码如下:

1.
小卖部存在共有的盘算办法,那是实业店铺的行事,可是他们的表现的主意差别等,全部我们抽象商店类,代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SimpleFactory.App.IFactroy
{

    public interface Ishop
    {
        double Getrent(int days, double dayprice, double performance);
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SimpleFactory.App.IFactroy
{

    public interface Ishop
    {
        double Getrent(int days, double dayprice, double performance);
    }
}

2.在空虚了店铺之后,大家要对创设具体产品类,这里便是有血有肉的项目集团,里面完毕该店铺的行为艺术。创造A类型的小卖部

2.在抽象了集团之后,大家要对制造具体产品类,那里正是现实性的门类集团,里面完毕该公司的行事艺术。成立A类型的商店

using SimpleFactory.App.IFactroy;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SimpleFactory.App.product
{
    //A类型的商店的创建
    public class Ashop:Ishop
    {
        /// <summary>
        /// /// A类型商店租金额,天数*单价+绩效*0.005
        /// </summary>
        /// <param name="days">天数</param>
        /// <param name="dayprice">每天单价</param>
        /// <param name="performance">日平均绩效</param>
        /// <returns></returns>
        public double Getrent(int days, double dayprice, double performance)
        {
            Console.WriteLine("A商店的租金算法");
            return days * dayprice + performance * 0.01;
        }
    }
}
using SimpleFactory.App.IFactroy;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SimpleFactory.App.product
{
    //A类型的商店的创建
    public class Ashop:Ishop
    {
        /// <summary>
        /// /// A类型商店租金额,天数*单价+绩效*0.005
        /// </summary>
        /// <param name="days">天数</param>
        /// <param name="dayprice">每天单价</param>
        /// <param name="performance">日平均绩效</param>
        /// <returns></returns>
        public double Getrent(int days, double dayprice, double performance)
        {
            Console.WriteLine("A商店的租金算法");
            return days * dayprice + performance * 0.01;
        }
    }
}

3.创建B类型的商号:

3.创办B类型的小卖部:

using SimpleFactory.App.IFactroy;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SimpleFactory.App.product
{
    /// <summary>
    /// B类型的商店的创建
    /// </summary>
    public class Bshop:Ishop
    {

        /// <summary>
        /// B类型商店的租金=月份*(每月价格+performance*0.001)
        /// </summary>
        /// <param name="month">月数</param>
        /// <param name="monthprice">月单价</param>
        /// <param name="performance">月平均绩效</param>
        /// <returns></returns>
        public double Getrent(int month, double monthprice, double performance)
        {
            Console.WriteLine("B商店的租金算法");
            return month * (monthprice + performance * 0.001);
        }
    }
}
using SimpleFactory.App.IFactroy;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SimpleFactory.App.product
{
    /// <summary>
    /// B类型的商店的创建
    /// </summary>
    public class Bshop:Ishop
    {

        /// <summary>
        /// B类型商店的租金=月份*(每月价格+performance*0.001)
        /// </summary>
        /// <param name="month">月数</param>
        /// <param name="monthprice">月单价</param>
        /// <param name="performance">月平均绩效</param>
        /// <returns></returns>
        public double Getrent(int month, double monthprice, double performance)
        {
            Console.WriteLine("B商店的租金算法");
            return month * (monthprice + performance * 0.001);
        }
    }
}

4.
在开创号项目集团并促成情势后,思考在怎么着境况下什么创设那种对象,于是不难工厂模式中最基本的有的:工厂类出来了

4.
在开立号项目集团并促成格局后,思考在什么景况下怎样创设那种对象,于是不难工厂方式中最主题的有的:工厂类出来了

using SimpleFactory.App.IFactroy;
using SimpleFactory.App.product;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SimpleFactory.App.factoryMethod
{
    public class factorymethod
    {
        public Ishop CreateShow(string show)
        {
            switch (show.Trim().ToLower())
            {
                case"ashop":
                    return new Ashop();
                case "bshop":
                    return new Ashop();
                default:
                    throw new Exception("该商店不存在");
            }
        }
    }
}
using SimpleFactory.App.IFactroy;
using SimpleFactory.App.product;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SimpleFactory.App.factoryMethod
{
    public class factorymethod
    {
        public Ishop CreateShow(string show)
        {
            switch (show.Trim().ToLower())
            {
                case"ashop":
                    return new Ashop();
                case "bshop":
                    return new Ashop();
                default:
                    throw new Exception("该商店不存在");
            }
        }
    }
}

5.然后就依据当下的商户类型进行判定,该类型的集团应该实行哪个种类算法:

5.然后就依据当下的公司类型进行判定,该类型的店堂应该进行哪类算法:

using SimpleFactory.App.factoryMethod;
using SimpleFactory.App.IFactroy;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SimpleFactory.App
{
    class Program
    {
        static void Main(string[] args)
        {
            Ishop As;
            factorymethod afm = new factorymethod();
            As = afm.CreateShow("ashop"); //a 类型的某商店
            double total = As.Getrent(30, 300, 2000);     //30 天/100元  日平均绩效为2000
            Console.WriteLine("该A类型商店的租金为:" + total);

            Console.WriteLine("=============");

            Ishop Bs;
            factorymethod bfm = new factorymethod();
            Bs = bfm.CreateShow("bshop"); //b 类型的某商店
            total = Bs.Getrent(3, 3000, 60000);          //3 月/4000元  月平均绩效为60000
            Console.WriteLine("该B类型商店的租金为:" + total);
            Console.ReadKey();
        }
    }
}
using SimpleFactory.App.factoryMethod;
using SimpleFactory.App.IFactroy;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SimpleFactory.App
{
    class Program
    {
        static void Main(string[] args)
        {
            Ishop As;
            factorymethod afm = new factorymethod();
            As = afm.CreateShow("ashop"); //a 类型的某商店
            double total = As.Getrent(30, 300, 2000);     //30 天/100元  日平均绩效为2000
            Console.WriteLine("该A类型商店的租金为:" + total);

            Console.WriteLine("=============");

            Ishop Bs;
            factorymethod bfm = new factorymethod();
            Bs = bfm.CreateShow("bshop"); //b 类型的某商店
            total = Bs.Getrent(3, 3000, 60000);          //3 月/4000元  月平均绩效为60000
            Console.WriteLine("该B类型商店的租金为:" + total);
            Console.ReadKey();
        }
    }
}

到那边大家贯彻了客户须要的两种档次公司的算法的急需,不过作为一种好的安插性架构,还应该考虑到前面包车型大巴供给变革,假如客户今后又充实了C类型商店和D类型商店,它们的算法须要又分裂,这些时候大家就要求举行C,D类型商店的创造,并一连Ishop接口,实现里面包车型地铁办法,同时还得继续修改工厂类在switc中加进case进行捕捉创设相应的合营社对象,一旦出现这么的情况,是不便宜程序的扩展性和连串前期的维护性的。

到此地大家落到实处了客户要求的两种类型合作社的算法的需求,不过作为一种好的安排性架构,还应当考虑到前边的供给变革,若是客户以后又追加了C类型商店和D类型商店,它们的算法须求又分裂,这几个时候我们就需求进行C,D类型商店的创建,并继承Ishop接口,实现里面包车型客车法子,同时还得继续修改工厂类在switc中增添case进行捕捉创设相应的店堂对象,一旦出现这么的情形,是不方便人民群众程序的扩大性和连串早先时期的维护性的。

优点:

优点:

  • 简短工厂方式能够根据外界给定的音讯,决定毕竟应当创造哪个具体类的靶子。通过它,外界能够从间接开立具体产品对 
    象的狼狈局面中脱身出来。
  • 外界与现实类隔断开来,偶合性低。
  • 明朗区分了个其他职分和权力,有利于整个软件系列结构的优化。
  • 简单易行工厂形式能够依照外界给定的音信,决定毕竟应当创制哪个具体类的指标。通过它,外界能够从第叁手开立具体产品对 
    象的难堪局面中脱身出来。
  • 外面与具体类隔断开来,偶合性低。
  • 显然区分了个其他天职和权限,有利于一切软件种类结构的优化。

缺点:

缺点:

  • 厂子类集中了颇具实例的创导逻辑,简单违反GRASPLAND的高内聚的权利分配原则 
  • 固然如此简易工厂情势能够适应一定的转变,但是它所能化解的标题是远远少于的。它所能成立的类只好是先行教考虑到的,倘使急需添加新的类,则就须要变更工厂类了。
  • 工厂类集中了有着实例的创制逻辑,简单违反GRASP中华V的高内聚的职责分配原则 
  • 即便如此简易工厂方式能够适应一定的浮动,可是它所能消除的标题是远远少于的。它所能成立的类只好是事先教考虑到的,倘若必要添加新的类,则就供给变更工厂类了。

并发的上诉意况,应该如何化解,值得思考,将在下三个厂子方法形式中得到很好的缓解。

出现的上诉意况,应该怎么样化解,值得考虑,将在下多少个厂子方法方式中得到很好的缓解。

 

 

Your Comments

近期评论

    功能


    网站地图xml地图