本本应用技巧

找回华硕Wifi快捷键
  
  前不久买了一台华硕A6U二手笔记本,并在开学后携带到学校使用,由于没有内置无线网卡,为了接入宿舍无线局域网,于是安装了一块Mini PC无线网卡,安装并配置完无线网卡后,可正常接入无线局域网,但却无法开启键盘上方的无线网卡快捷键。
  笔者的这款华硕A6U笔记本没有内置无线网卡,但由于预留了Mini PC扩展插槽,华硕官方依旧设计了无线网卡快捷键,即当用户同时按下Fn+F2快捷键时,可开启或关闭无线网络功能。遗憾的是,笔者的笔记本扩展无线网卡后,虽然可正常无线上网,但WIFI快捷键无法使用,且无线网卡指示灯不亮,使用很不方便。经查询得知,要使用华硕笔记本的快捷键,必须安装电源管理驱动(如图1),然而安装之后,快捷键依旧无法使用,经过几经周折,笔者在网上咨询了几位发烧友,终于开启了无线网卡的快捷键。
  首先进入设备管理器,双击“网络适配器”下的无线网卡驱动标志,切换到“详细信息”界面,记录“设备范例ID”下面的一窜字符,即无线网卡的ID号码,例如PCI\VEN_14E4&DEV_4320&SUBSYS_00E70E11(如图2)。进入ATK100电源管理驱动安装目录,打开其中的OEM.inf文件,并记录下[ASUS]列表下的任何一个ID号码,即ATK100快捷键所支持的任何一个网卡ID号码,例如PCI\VEN_14E4&DEV_4320&SUBSYS_100F1043(如图3)。
  同时按Ctrl+Alt+Del键进入任务管理器,并结束HControl.exe程序进程(如图4),运行UltraEdit编辑器软件,并打开ATK100电源管理驱动安装目录下的HControl.exe程序,在“搜索”菜单下选择“替换”,并在“查找内容”一栏输入ATK100快捷键所支持的网卡ID号码,在“替换为”一栏输入无线网卡的ID号码,点击“全部替换”按钮(如图5),重新启动系统,此时Fn+F2快捷键即可生效,而且开启无线网卡后,无线网卡指示灯也会亮起来。
  
  巧装易PC的Win7驱动
  
  我是2008年11月买的华硕Eee PC 900,预装的是Windows XP系统,用了半年感觉速度还不错,但看腻了XP视窗界面,于是最近改装了Windows 7系统,但由于华硕没有提供Windows 7下的专用驱动,使得使用出现不少问题,经摸索后,笔者终于找到了解决办法。
  笔者在安装完Windows 7后,系统默认给显卡、声卡安装好了驱动,可正常看电影、听音乐,但在视频聊天时,声卡的MIC功能无法使用,而且系统进入休眠或睡眠状态下无法唤醒,并总是弹出显卡驱动缺少文件的错误提示,经检查发现,这是系统自带的驱动存在兼容问题,解决方法是安装Windows 7专用驱动,遗憾的是,华硕只提供了XP版硬件驱动。
  比较幸运的是,由于Vista与Windows 7采用了一样的内核技术,因而二者的驱动往往可以通用,根据这个原理,如果能找到Vista版驱动,即可解决驱动兼容性问题,为此笔者成功给无线网卡安装了Vista版驱动,并测试可正常使用。不过却没找不到Vista版的显卡和声卡驱动,而如果强行安装XP版硬件驱动,则会提示系统版本不符合而拒绝安装。
  经过多次的试验发现,其实XP版驱动与Windows 7系统也可以通用,只是在安装驱动时需要注意技巧,以安装声卡驱动为例,下载并解压XP版声卡驱动后,不要着急运行ASUS SETUP.exe程序,而是鼠标右键点击SETUP.exe程序(如图6),之后选择“以管理员身份运行”,这样就可成功安装声卡驱动(如图7),安装后解决了MIC录音问题,而根据该方法安装显卡驱动和ACPI电源管理驱动后,彻底解决了休眠和睡眠时的各种故障问题。
  
  解决Vista笔记本爆音问题
  
  前不久买了一台华硕Z53Q23Jr-SL二手笔记本,拿到机器后马上测试,听音乐、看电影都没问题,该笔记本预装了Vista系统,并内置了一键恢复功能,为了验证一键恢复是否管用,于是重新恢复了Vista系统,可如此一来,听音乐、看电影时都有爆音现象。
  由于是恢复Vista系统后才出现的问题,因而可判断跟硬件无关,首先认定是声卡驱动的问题,遗憾的是,更换了多款显卡、声卡驱动后,爆音问题依旧还在,由于支付宝的诚信作用,无奈之下,只好把该问题推给淘宝卖家,淘宝卖家一听故障现象,马上认定是恢复Vista系统后造成的,并声称可以通过简单的设置解决,在淘宝卖家的指导下,最终解决了噪音问题。该方法也适用于其它预装Vista的笔记本电脑。
  要解决听音乐时的爆音问题,主要是提升声卡的采样频率和位深度,方法是右键单击任务栏的声音小喇叭,选择“播放设备”菜单,在“声音”界面中选择“扬声器/耳机”,然后点击“属性”按钮,之后切换到“高级”窗口,可以看到在“默认格式”下,声音采样频率和位深度默认被设置为“16位,44100Hz”(如图8),将其改为“24位,96000Hz”后,点击“应用”按钮,之后点击“测试”按钮测试一下是否还有噪音。
  而要解决看电影时的爆音问题,必须关闭笔记本的所有省电功能,因为一旦启用节能模式后,看电影时声音就会有30秒的延迟,此时应该进入控制面板的“电源选项”,将“首选计划”设置为“最高性能”(如图9)。此外,由于该笔记本采用了ATI Mobility Radeon显卡,该显卡支持PowerPlay节能技术,显卡驱动却默认开启节能模式,此时应该进入显卡驱动控制面板,将“启用PowerPlay”复选框去掉即可(如图10)。
  
  自动切换鼠标与触摸板
  
  作为商务一族,我需要出差时使用笔记本,在火车上或机场等场合,仅用触摸板即可完成各种操作,但在宾馆、办公室时,为了提高办公效率,通常会外接USB鼠标操作,但却遇到一个棘手问题,打字时总误触摸到触摸板,鼠标动不动就乱跳,严重影响正常使用。
  笔者的笔记本为富士通Life Book S6410,为了避免打字时碰到触摸板,笔者不得不每次使用USB鼠标时,进入“鼠标属性”中禁用触摸板(如图11),而当需要使用触摸板时,又得手动开启触摸装置,非常繁琐。前不久同事也买了一款富士通Life Book笔记本,据同事说,他的笔记本很“智能化”,只要接入USB鼠标,触摸板就会自动关闭。
  经查证发现,由于同事的笔记本使用了新版触摸板驱动,新驱动提供了触摸板自动关闭功能,而我的笔记本预装驱动比较老,两款笔记本都使用了Synaptics触摸板,如果升级新版触摸板驱动,是否也有对应的功能呢?于是登录论坛查询,查询到从V12.2.2.0版新驱动开始,系统能检测USB鼠标并自动屏蔽触摸板。
  于是登录富士通官方网站,查询并下载了V12.2.2.0版新驱动,安装后重新启动系统,再次进入“鼠标属性”,切换到“装置设定值”窗口,此时发现设置面板多了一个复选框,勾选“连接外部USB指向装置时禁用内部指向装置”(如图12),点击“确定”按钮,这样只要插入USB鼠标,系统就会弹出一个提示窗口(如图13),然后会马上自动关闭触摸板,从而避免因误碰触摸板而影响鼠标操作,而当拔下USB鼠标时,触摸板会自动开启,非常方便。
  
  自由掌控多媒体热键
  
  我在年初买的Gateway T系列笔记本,由于键盘上具有丰富的多媒体热键,所以平时看电影、听音乐非常方便,可笔者每天几乎都在听在线音乐和看在线电影,多媒体热键就无用武之地,笔者通过研究,将多媒体热键改造成了自己的快捷键,让笔记本充满个性。

  在改造之前,笔者通过观察,这台笔记本的键盘上方的左边具有三个热键(如图14),它们分别用于开启媒体中心、观赏DVD、听CD三大功能,但要使用这三个快捷热键,必须安装热键驱动程序,驱动程序的作用是判断系统中是否有“ehshell.exe”文件,该文件就是Vista下的Windows Media Center,然后根据判断的结果为三个快捷键添加注册表信息。
  如果在注册表中修改为自己常用程序的位置,即可将这几个多媒体热键变成属于自己的快捷键,方法是进入“开始”→“运行”窗口,输入Regedit命令并回车(如图15),打开注册表编辑器后,依次展开HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\MobilePC\HotStartButtons,之后会看到1、2、3三个项目,它们分别对应着键盘上方的三个快捷热键。
  每个快捷键项目的下面都会有一个名为ApplicationPath的键值,它就是快捷热键所控制的程序绝对路径,双击ApplicationPath键值后,在弹出的对话框中修改为想要启动的软件程序即可(如图16),但必须注意,程序路径要在双引号里面,将3个快捷热键都修改完毕后,重新启动系统,此时再次按下对应的快捷热键,就会马上启动想要运行的软件程序。
  此外,如果觉得修改注册表麻烦,也可以打开记事本,然后输入如下内容(如图17),其中程序绝对路径和程序类别可根据个人需要修改,之后在“文件”菜单下选择“另存为”,输入文件名之后,在“保存类型”中选择“所有文件”,点击“保存”按钮后,执行刚刚保存的.reg注册表文件,点击“确定”添加此信息到注册表,重新启动系统即可生效。
  
  激活PCI-E X16工作模式
  
  我是暑期买的Gateway TC7410c笔记本,配置双核CPU、2GB内存及GeForce G 105M独立显卡,显卡显存为512MB,平时看电影、浏览网页都没问题,但在玩3D游戏时,游戏速度却不流畅,重装系统、更换驱动也如此,按理来说,显卡性能不俗,为何游戏不流畅呢?
  为了测试显卡性能,笔者运行EVEREST测试软件,却无意间发现显卡被强制工作在PCI-E X1模式下(如图18),并要发挥GeForce G 105M的性能潜力,必须让其工作在PCI-E X16模式,否则显卡性能大打折扣,经查证发现,由于出于节能的考虑,NVIDIA在该显卡中使用了一种Power Mizer专用节能技术,此技术允许在使用电池时,让显卡自动节能以获得更长久的工作时间,但却会强制让显卡工作在PCI-E X1模式下。
  于是笔者重启笔记本,开机时按F2键进入BIOS设置界面,却找不到任何关于显卡工作模式的选项,后来才知道,显卡Power Mizer功能是由NVIDIA驱动来控制的,于是登录Windows系统,打开NVIDIA控制面板,展开“移动”项目,点击““更改PowerMizer设置”项目,在右边窗口可以看到,显卡PowerMizer功能默认处于开启状态,点选“不控制我的耗电量(禁用PowerMizer)”选项(如图19),点击“应用”按钮即可,再次用EVEREST软件查看时,显卡已经工作在PCI-E X16模式下,运行游戏时的速度也很流畅。

  

实验一 单例模式的应用 1 实验目的 1) 掌握单例模式(Singleton)的特点 2) 分析具体问题,使用单例模式进行设计。 2 实验内容和要求 很多应用项目都有配置文件,这些配置文件里面定义一些应用需要的参数数据。 通常客户端使用这个类是通过new一个AppConfig的实例来得到一个操作配置文件内容 的对象。如果在系统运行中,有很多地方都需要使用配置文件的内容,系统中会同时存 在多份配置文件的内容,这会严重浪费内存资源。 事实上,对于AppConfig类,在运行期间,只需要一个对象实例就够了。那么应该怎 么实现呢?用C#控制台应用程序实现该单例模式。绘制该模式的UML图。 3 模式结构图 4 UML类图 5 代码 6运行结果 实验二 工厂模式的应用 1 实验目的 1) 掌握工厂模式(Factory)的特点 2) 分析具体问题,使用工厂模式进行设计。 2 实验内容和要求 有一个OEM制造商代理做HP笔记本电脑(Laptop),后来该制造商得到了更多的品牌笔 记本电脑的订单Acer,Lenovo,Dell,该OEM商发现,如果一次同时做很多个牌子的本本 ,有些不利于管理。利用工厂模式改善设计,用C#控制台应用程序实现该OEM制造商的工 厂模式。绘制该模式的UML图。 3 模式结构图 4 UML类图 5 代码 6运行结果 实验三 抽象工厂模式的应用 1 实验目的 1) 掌握抽象工厂模式(Abstract Factory)的特点 2) 分析具体问题,使用抽象工厂模式进行设计。 2 实验内容和要求 麦当劳(McDonalds)和肯德基(KFC)快餐店都经营汉堡(Hamburg)和可乐(Cola ),用C#控制台应用程序实现这两个快餐店经营产品的抽象工厂模式。绘制该模式的UM L图。 3 模式结构图 4 UML类图 5代码 6运行结果 df 实验四 建造者模式的应用 1 实验目的 1) 掌握建造者模式(Builder)的特点 2) 分析具体问题,使用建造者模式进行设计。 2 实验内容和要求 建造者模式是一种创建型模式,它主要是应对项目中一些复杂对象的创建工作。所谓 "复杂对象",是指此对象中还含有其它的子对象。我们现在定义一个场景:汽车生产必 须包含车轮(Wheel)、油箱(OilBox)和车身(Body),应用建造者模式,用C#控制台应用程 序实现该设计,构建BMW品牌和BenZ品牌汽车生产。绘制该模式的UML图。 3 模式结构图 4 UML类图 5代码 6运行结果 实验五 适配器模式的应用 1 实验目的 1) 掌握适配器模式(Adapter)的特点 2) 分析具体问题,使用适配器模式进行设计。 2 实验内容和要求 一个软件团队开发绘图系统,设计了圆对象(Circle)、矩形对象(Rectangle),线对 象(Line)都支持Draw()函数,即可以通过Draw()函数绘制图形。为了加快项目进度,将 角度对象(Angle)绘制功能交给了合作团队实现。但合作团队将角度对象绘制函数定为了 DrawAngle()。绘图系统提供给用户后,用户不满意,希望能统一的调用,不用记太多命 令。应用适配器模式,用C#控制台应用程序完善该设计。绘制该模式的UML图。 3模式结构图 4 UML类图 5 代码 6运行结果 实验六 桥接模式的应用 1 实验目的 1) 掌握桥接模式(Bridge)的特点 2) 分析具体问题,使用桥接模式进行设计。 2 实验内容和要求 一个咖啡店可以提供大杯(JorumCoffee)、中杯(MediumCoffee)、小杯(SmallCoffee )的咖啡(Coffee),为了满足不同用户的口味,在咖啡中可以添加牛奶(Milk),或者糖( Sugar),或者柠檬(Lemon),提供给用户不同口味的组合,如大杯咖啡加牛奶,中杯咖啡 加糖,小杯咖啡加柠檬,小杯咖啡加糖等。应用桥接模式,用C#控制台应用程序实现该 设计。绘制该模式的UML图。 3 模式结构图 4 UML类图 5 代码 6 运行结果 实验七 装饰模式的应用 1 实验目的 1) 掌握装饰模式(Decorator)的特点 2) 分析具体问题,使用装饰模式进行设计。 2 实验内容和要求 "喜羊羊逃命"游戏:喜羊羊被灰太狼追,喜羊羊最多5条命,灰太狼每咬到喜羊羊一 次,喜羊羊就要少一条命。在逃的过程中喜羊羊可以吃到三种苹果,吃"红苹果"可以给 喜羊羊加上保护罩,吃"绿苹果"可以加快喜羊羊奔跑速度,吃"黄苹果"可以使喜羊羊趟 着水跑。应用装饰模式,用C#控制台应用程序实现该设计。绘制该模式的UML图。 提示:这个例子如果用类的继承来实现的话那可就麻烦了,你需要为喜羊羊派生3*2 *1=6个子类(有保护罩的喜羊羊,奔跑速度加快的喜羊羊,会趟水的喜羊羊,既有保护 罩又会趟水的喜
抽象工厂模式(Abstract Factory Pattern) 引入: 在前面介绍的两个创建型模式里面,我们解决的都是有关"new"的问题,用它们来避免显式指定类创建对象。我写的也非常简单易懂,相信看过的朋友们都应该对简单工厂模式、工厂方法模式的意图、所能解决的问题及适用情景有一定的了解了。但是若要达到灵活运用,什么时候用,怎样用合适还不是看一篇文章就能解决的问题。呵呵..这需要你对OO的理解程度,你的项目开发经验等等许多方面的积累。一起努力喔。。 好了,咱们言归正传,通过对这两个模式的了解,我们掌握一种思想,就是在创建一个对象时,需要把容易发生变化的地方给封装起来,来控制变化(哪里变化,封装哪里),以适应客户的变动,项目的扩展。但是,我们在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作,同时由于需求的变化,这“一系列相互依赖的对象”也要改变,如何应对这种变化呢?如何像简单工厂模式、工厂方法模式一样绕过常规的"new",然后提供一种“封装机制”来避免客户程序和这种“多系列具体对象创建工作”的紧耦合?可能有人会说,你也可以将这些对象一个一个通过工厂方法模式来解决呀?但是,我们试想,既然是一系列相互依赖的对象,它们是有联系的,每个对象都这样解决,你又如何来保证他们的联系呢?举一个例子:Windows桌面主题,当你更换一个桌面主题的时候,系统的开始按钮、任务栏、菜单栏、工具栏等等都变了,而且是一起变的,他们的色调都还很一致,难道类似这样的问题,怎么来解决呢?它的天敌就是抽象工厂模式。 意图: 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 参考者: 也就是该模式中的各个类或对象之间的关系: 抽象工厂(Abstract Factory) 声明生成一系列抽象产品的方法 具体工厂(Concrete Factory) 执行生成一系列抽象产品的方法,生成一系列具体的产品 抽象产品(Abstract Product) 为这一系列的某一种产品声明接口 具体产品(Product) 定义具体工厂生成的具体产品的对象,实现产品接口 客户(Client) 我们的应用程序客户端(不要理解成人),使用抽象产品和抽象工厂生成对象。 抽象工厂模式UML图 抽象工厂模式在生活中的实例 咱们继续拿怎么穿衣服来说明这个抽象工厂模式。 就拿你来说吧。工作了,为了参加一些聚会,肯定有两套或多套衣服吧,比如说有商务装(成套,一系列具体产品)、时尚装(成套,一系列具体产品),甚至对于一个家庭来说,可能有商务女装、商务男装、时尚女装、时尚男装,这些也都是成套的,即一系列具体产品。咱们假设一种情况(现实中是不存在的,要不然,没法进入共产主义了,但有利于说明抽象工厂模式),在你的家中,某一个衣柜(具体工厂)只能存放某一种这样的衣服(成套,一系列具体产品),每次拿这种成套的衣服时也自然要从这个衣柜中取出了。用OO的思想去理解,所有的衣柜(具体工厂)都是衣柜类的(抽象工厂)某一个,而每一件成套的衣服又包括具体的上衣(某一具体产品),裤子(某一具体产品),这些具体的上衣其实也都是上衣(抽象产品),具体的裤子也都是裤子(另一个抽象产品)。 分析: 要好好去读上面那个实例,虽然有点绕嘴,其实只要用心去读,分清了抽象工厂模式的各个角色,对理解设计模式是非常重要的。理解头绪,然后接合简单工厂模式、工厂方法模式对工厂家族的了解,再加上抽象工厂模式的意图,头脑中差不多有一个雏型了吧。好了,咱们一起来分析一下。。 先把各个角色揪出来。 抽象工厂:虚拟的衣柜,它只是个概念而已。在项目中可能是一个接口或抽象类,定义规则,取出上衣,裤子。 具体工厂:具体的存在的衣柜,它用于存放某一种成套的衣服,换句话说,这种成套的衣服都是从这个衣柜中取出的。在项 目中继承于抽象工厂,实现抽象工厂中的方法,取出具体产品,某一件上衣,某一条裤子。 抽象产品:虚拟的衣服,也只是个概念。在项目中可能是多个接口或抽象类,定义规则,有什么特性,起什么作用。 具体产品:具体的实际存在的产品,它指的就是用于组装成某一套衣服的某一件上衣或裤子。它继承自某一个抽象产品。实 现抽象产品中制定的规则,特性。 它们之间怎么联系呢?客户在用的时候,依赖的又是什么呢? 客户在要的时候,首先要说出你要的什么系列的衣服,然后根据它的要求生成一个具体工厂的实例,剩下的工作就都是这个倒霉的具体工厂了,它会根据自己的实现生成一个上衣,生成一个裤子,然后把它交给客户。客户在这一过程中并不知道具体工厂都做了什么。也就是说,客户只依赖于抽象工厂和抽象产品了。在初始化的时候会用到一次具体工厂类名,我们根据.NET特有的反射机制又可以把这个在客户端唯一的具体的非抽象类放到一个应用程序配置文件中,防止它变化。 这就符合了设计模式中的“开放--封闭”原则,依赖倒转原则,里氏代换原则等等。 具体代码如下: 抽象工厂角色: 1namespace AbstractFactory 2{ 3 //抽象工厂类, 4 public abstract class AbstractClothes 5 { 6 //抽象方法:创建一个上衣 7 abstract public AbstractCoat CreateCoat(); 8 //抽象方法:创建一个裤子 9 abstract public AbstractTrousers CreateTrousers(); 10 } 11} 12 抽象产品角色: 1namespace AbstractFactory 2{ 3 /**//// <summary> 4 /// 抽象产品----上衣抽象类 5 /// </summary> 6 public abstract class AbstractCoat 7 { 8 //性别属性 9 public abstract bool Sex 10 { 11 get; 12 } 13 14 //样式属性 15 public abstract string Style 16 { 17 get; 18 } 19 } 20 21 /**//// <summary> 22 /// 抽象产品----裤子抽象类 23 /// </summary> 24 public abstract class AbstractTrousers 25 { 26 //性别属性 27 public abstract bool Sex 28 { 29 get; 30 } 31 32 //样式属性 33 public abstract string Style 34 { 35 get; 36 } 37 } 38} 39 具体工厂角色: 1namespace AbstractFactory 2{ 3 /**//// <summary> 4 ///时尚男装 5 /// </summary> 6 public class FashionManClothes:AbstractClothes 7 { 8 public override AbstractFactory.AbstractCoat CreateCoat() 9 { 10 return new CoatA(); 11 } 12 13 public override AbstractTrousers CreateTrousers() 14 { 15 return new TrousersA(); 16 } 17 } 18 19 /**//// <summary> 20 /// 时尚女装 21 /// </summary> 22 public class FashionWomanClothes : AbstractClothes 23 { 24 public override AbstractCoat CreateCoat() 25 { 26 return new CoatB(); 27 //throw new Exception("The method or operation is not implemented."); 28 } 29 public override AbstractTrousers CreateTrousers() 30 { 31 return new TrousersB(); 32 //throw new Exception("The method or operation is not implemented."); 33 } 34 } 35} 具体产品角色:(注意:我并没有把所有的具体产品类都列出来,由于简单,可以推想出剩余的产品类,详见附件) 1namespace AbstractFactory 2{ 3 /**//// <summary> 4 /// 时尚男性上衣 5 /// </summary> 6 public class CoatA:AbstractFactory.AbstractCoat 7 { 8 private bool sex = true; 9 private string style = "时尚"; 10 /**//// <summary> 11 /// 重写基类的Sex属性 12 /// </summary> 13 public override bool Sex 14 { 15 get 16 { 17 return sex; 18 } 19 } 20 21 /**//// <summary> 22 /// 重写基类的Style属性 23 /// </summary> 24 public override string Style 25 { 26 get 27 { 28 return style; 29 } 30 } 31 } 32 33 /**//// <summary> 34 /// 时尚男性裤子 35 /// </summary> 36 public class TrousersA : AbstractTrousers 37 { 38 private bool sex = true; 39 private string style = "时尚"; 40 public override bool Sex 41 { 42 get 43 { 44 return sex; 45 } 46 } 47 public override string Style 48 { 49 get 50 { 51 return style; 52 } 53 } 54 } 55} 客户端代码: 1namespace AbstractFactory 2{ 3 /**//// <summary> 4 /// 创建衣服类 5 /// </summary> 6 public class CreateClothes 7 { 8 private AbstractCoat myCoat; 9 private AbstractTrousers myTrousers; 10 public CreateClothes(AbstractClothes clothes) 11 { 12 myCoat = clothes.CreateCoat(); 13 myTrousers = clothes.CreateTrousers(); 14 } 15 16 public void ShowMyClothes() 17 { 18 Console.WriteLine("My Clothes:"); 19 string sex= myCoat.Sex ? "男" : "女"; 20 //Console.WriteLine("Coat:{0} {1}", myCoat.Sex ? "男" : "女", myCoat.Style); 21 Console.WriteLine("Coat:{0} {1}", sex, myCoat.Style); 22 sex=myTrousers.Sex?"男":"女"; 23 Console.WriteLine("Trousers:{0} {1}", sex, myTrousers.Style); 24 } 25 } 26 27 28 public class Client 29 { 30 static void Main(string[] args) 31 { 32 //创建一个工厂类的实例 33 string assemblyName = ConfigurationManager.AppSettings["assemblyName"]; 34 string fullTypeName =string.Concat( ConfigurationManager.AppSettings["nameSpaceName"] ,".", ConfigurationManager.AppSettings["typename"]); 35 36 AbstractClothes factory = (AbstractClothes)Assembly.Load(assemblyName).CreateInstance(fullTypeName); 37 CreateClothes clothes = new CreateClothes(factory); 38 clothes.ShowMyClothes(); 39 Console.Read(); 40 } 41 } 42} 43 app.config文件 1<configuration> 2 <appSettings> 3 <!--一般情况下只需改第三个"typename"就行了,具体工厂类 --> 4 <add key="assemblyName" value="ConcreteFactory"/> 5 <add key="nameSpaceName" value="AbstractFactory"/> 6 <add key="typename" value="FashionManClothes"/> 7 </appSettings> 8</configuration>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值