[AYJS] wpf设计模式学习[1]-简单工厂-搭积木

一下内容皆是个人想法,只是希望将专业的东西,转化成通俗的东西,不想含有啰嗦的成分

1.学前故事:

   看了3,4个简单工厂的例子,映像最深的还是那个计算器(好像还是微软的一道面试题"计算器,用OOP实现")

   说实话,再讲模式之前,记住两个公式:  (接口命名规范,名称前面加个“  I  ”)

   IA ic=new C;

   IA id=new D;

   当参数是 IA类型时,ic,id当然都能传入,当ic调他里面的方法和属性时是C里面的,而id调他里面的方法和属性时是D里面的

   这就是多态了,如果记不住,请记住模糊的感觉,心里知道,说不出来没关系

   父类 a=new 子类1;

   父类 a=new 子类2;

   跟上面是一样的道理

   有个专业术语,叫"里氏替换原则",讨厌专业的

  这就是传说中的他们的多态了,掌握这个,java 的oop跟这个一模一样,记住这种感觉,对学习设计模式是很重要的。

  相关知识点: C# OOP  C# 接口 C# 继承 C# 多态 C#封装

2.开始学习 (以下内容采用第二个公式) 不想用计算器的例子,好俗~

  想啊想~想啊想~

 《搭积木》吧,小时候幼儿园的一个游戏,好怀念~

组件:各种形状的木头

动作:拿起积木搭建

首先新建一个控制台应用程序

①新建一个Wood 类,木头的总称,来基本定它的子类的模样,如果 关于 Virtual 关键字不懂的,建议先去学学oop

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

namespace SimpleFactoryDemo
{
    public class Wood
    {
        /// <summary>
        /// 木头形状
        /// </summary>
        public string WoodShape { get; set; }
        /// <summary>
        /// 木头颜色
        /// </summary>
        public string WoodColor { get; set; }

        public virtual void StartBuild()
        {
            Console.WriteLine("你拿起了" + WoodColor + "的" + WoodShape + "的积木...");
            Console.WriteLine("成功了!");
        }
    }
}

然后我们开始做第一块木头,黄色的圆形的木头

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

namespace SimpleFactoryDemo
{
   public class RoundWood:Wood
    {
       public override void StartBuild()
       {
           WoodColor = "黄色";
           WoodShape = "圆形";
           base.StartBuild();
       }
    }
}

同理我们多做几块

白色的方形的木头

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

namespace SimpleFactoryDemo
{
   public class SquareWood:Wood
    {
       public override void StartBuild()
       {
           WoodColor = "白色";
           WoodShape = "方形";
           base.StartBuild();
       }
    }
}

灰色的拱形木头

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

namespace SimpleFactoryDemo
{
   public class ArchWood:Wood
    {
       public override void StartBuild()
       {
           WoodColor = "灰色";
           WoodShape = "拱形";
           base.StartBuild();
       }
    }
}

好了,搭积木的原材料都有了,此时我们有三块木头了

但事实上我们根本不止三块木头,以后可能还有其他形状的其他颜色的木头,为了方便能有更多的木头,我们需要一个工厂来生产这个木头,说白了,其实是为了我们来拿木头搭建的时候更轻松,方便打下基础,拿木头的时候你就知道了

我们來建一个木头工厂吧

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

namespace SimpleFactoryDemo
{
   public class Factory
    {
       public static Wood CreateWood(string shape) {
           Wood newWood = null;
           switch (shape)
           {
               case "圆形":
                   newWood = new RoundWood();
                   break;
               case "方形":
                   newWood = new SquareWood();
                   break;
               case "拱形":
                   newWood = new ArchWood();
                   break;
               default:
                   break;
           }
           return newWood;
       }
    }
}

我这里只是根据形状来生产木头的,没有颜色,如果你想还能控制颜色你还可以加个颜色作为判断,来构成 我们的 第二个公式的样子

   父类 a=new 子类1;

   父类 a=new 子类2;

好了,到此为止,木头有了,哦,说错了,是积木;

        积木有了,生产积木的工厂也有了,那现在搭你想要搭的东西吧

在Program.cs文件里,我是这样写的

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

namespace SimpleFactoryDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Wood factory = Factory.CreateWood("方形");
            factory.StartBuild();

            Console.ReadLine();
        }
    }
}

效果

如果不考虑定死的颜色,我们现在只需要把”方形“改成    我们身边现有的形状,工厂就可以帮你生产出该形状的积木,说生产太那个了,就是创建一个有形状的积木对象给你,然后你掉这个积木的方法就行了,

用简单工厂模式,可以方便某种情况的拓展,而你并不知道这些情况共有多少个,这有情况都要有某些共同之处,就可以了

在看一下吧

Wood factory = Factory.CreateWood("方形");
            factory.StartBuild();
            Wood factory1 = Factory.CreateWood("拱形");
            factory1.StartBuild();
            Wood factory2 = Factory.CreateWood("圆形");
            factory2.StartBuild();
            Console.ReadLine();
        }

其他例子:例如 两位数计算的计算器,用工厂创建运算方法,例如+-×÷/...

我的应用拓展:结账方式有很多,用工厂创建各种结账方式,前台调用时只要传个结账方式的名称:就可以创建那个结账方式的对象,给你调用该结帐方式的方法或者属性,以后有什么新的结账方式,添加就行了。

还有分开写类比较安全,例如 你不想某些人看到你写的某种方式的结账算法,简单工厂是很好的选择,别人只要新建一个类,写他的方法就行了,然后你在工厂那个类中添加一个结账方式就行了。

最后露一个项目结构图吧

demo下载:http://download.csdn.net/detail/yangyanghaoran/4327225

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WPF是一种创建Windows应用程序的框架,它提供了许多可视化组件和工具,使得应用程序的创建变得更加容易和快捷。本次实例的项目是一个简单的点餐系统,它包含了以下几个主要模块: 1. 登录界面 用户需要输入用户名和密码才能成功登录,登录成功后,程序将跳转到订单界面。如果用户输入的用户名或密码不正确,则会提示错误信息。 2. 菜单界面 在菜单界面,用户可以查看所有可供选择的菜品列表,并可以选择需要点的菜品。每个菜品都可以显示它的描述、价格以及图片,用户可以在右侧的“购物车”中查看他们已经点的菜品以及总价。 3. 订单界面 订单界面用于显示用户已经点的菜品信息以及订单的总价。用户在确认购物车中的菜品信息无误后,可以点击“去结算”按钮,进入支付界面。 4. 支付界面 在支付界面,用户需要选择支付方式并输入对应的支付信息,如信用卡号、有效期和验证码等。支付成功后,程序将返回订单界面并提示用户支付成功。 通过使用WPF的鲁棒性、可扩展性和易用性,开发者可以在编写这样的小项目时得到很大的好处。开发者可以使用大量的分层和组件化方法,使他们的代码变得易于管理和扩展。此外,通过使用WPF的数据绑定和样式,开发者可以使程序的UI更加一致和响应式。总的来说,使用WPF编写点餐系统可以使开发者轻松地创建一个功能齐全、易于使用并具有良好用户体验的应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值