简单工厂模式

简单工厂模式

…衆ロ難τιáo~ 提交于 2019-11-29 01:35:11
1 namespace UnitTestProject1 2 { 3 4 /// <summary> 5 /// 简单工厂模式的缺点: 6 /// 增加具体产品时,需要修改工厂类里面生成具体产品的方法,这就违反了开闭原则。具体产品经常发生变化时,不建议使用简单工厂模式。 7 /// 8 /// </summary> 9 [TestClass] 10 public class simpleDesign 11 { 12 [TestMethod] 13 public void TestMethod1() 14 { 15 IPeople people = new PeopleFactory().NewInstance(1); 16 people.SayHello(); 17 } 18 } 19 20 public interface IPeople 21 { 22 void SayHello(); 23 } 24 25 public class ChinesePeople : IPeople 26 { 27 public void SayHello() 28 { 29 Console.WriteLine("早上好,吃了吗"); 30 } 31 } 32 33 public class EnglandPeople : IPeople 34 { 35 public void SayHello(

简单工厂模式小结

和自甴很熟 提交于 2019-11-28 14:46:29
直觉地使用计算机机能理解的面向过程的方式去解决问题,会出现耦合的问题,是一种短期的方案,使得程序不容易维护与拓展。所以应该将面向对象的思想应用到程序设计当中,通过封装、继承、多态将程序的耦合度降低,运用设计模式增强程序的灵活性,使得它易于修改与复用。为了培养更好的编程思维与习惯,先从设计模式的学习与使用开始,希望有计划地学习设计模式,并且逐渐从了解到化为内用嘤嘤嘤!一、简单工厂模式:创建一个专门的类,使它根据情况创建不同类的对象,实现业务逻辑与界面逻辑的分离,降低耦合。 二、以实现简单计算器为例:创建基础运算抽象类继承抽象类,实现抽象类中的具体运算方法创建简单工厂类,由简单工厂类根据情况选定运算方法,即选定需要创建的类对象。 abstract class Operation{ private double numberA=0; private double numberB=0; public double getNumberA() { return numberA; } public void setNumberA(double numberA) { this.numberA = numberA; } public double getNumberB() { return numberB; } public void setNumberB(double numberB) {

Java 之23种设计模式解析

喜你入骨 提交于 2019-11-28 11:59:41
三、Java的23中设计模式 A、创建模式 从这一块开始,我们详细介绍Java中23种设计模式的概念,应用场景等情况,并结合他们的特点及设计模式的原则进行分析。 首先,简单工厂模式不属于23中涉及模式,简单工厂一般分为:普通简单工厂、多方法简单工厂、静态方法简单工厂。 0、简单工厂模式 简单工厂模式模式分为三种: 01、普通 就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。首先看下关系图: 举例如下:(我们举一个发送邮件和短信的例子) 首先,创建二者的共同接口: [java] view plain copy public interface Sender { public void Send(); } 其次,创建实现类: [java] view plain copy public class MailSender implements Sender { @Override public void Send() { System.out.println( "this is mailsender!" ); } } [java] view plain copy public class SmsSender implements Sender { @Override public void Send() { System.out.println( "this is sms

设计模式-简单工厂模式详解

半城伤御伤魂 提交于 2019-11-28 11:41:46
一、简单工厂模式的概念   简单工厂模式是属于创建型设计模式,关注于对象的创建。   我们来考虑一个支付的场景,在点外卖的时候,可以使用选择支付宝、微信支付、ApplePay等支付方式。   这些支付方式虽然名字不一样,但是用法和流程基本类似,都包括了验证账号的合法性、检查支付环境的安全性、验证支付密码、从账号里扣款、通知用户支付结果等功能。   有共性,我们就抽象出一个基类,然后各种支付方式子类继承它,再实现自己的业务逻辑。   如果我们希望在使用这些支付方式时,不需要知道这些具体支付方式子类的名字,只需要知道支付方式名字,把该名字传入一个方法即可返回一个相应的对象,此时,就可以使用简单工厂模式。 二、实现   1、首先定义一个各种支付方式的抽象类,简单起见,定义了判断账号是否正常、支付、通知用户几个方法 namespace SimpleFactory { using System; public abstract class AbstractPaymentMethod { /// <summary> /// 判断用户的账号是否正常 /// </summary> /// <param name="accountNumber">账号</param> /// <returns>账号是否正常</returns> public abstract bool IsAccountNormal

设计模式--简单工厂模式 策略模式

家住魔仙堡 提交于 2019-11-28 08:12:03
名词理解: 工厂(Factory)模式我们可以做如下理解, 假设有一个Audi的公司生产汽车(似乎也不用假设了),它掌握一项核心的技术就是生产汽车,另一方面,它生产的汽车是有不同型号的,并且在 不同的生产线上进行组装。当客户通过销售部门进行预定后,Audi公司将在指定的生产线上为客户生产出它所需要的汽车。 策略(Strategy)模式在结构上与工厂模式类似,唯一的区别是工厂模式实例化一个产品的操作是在服务端来做的,换句话说客户端传达给服务端的只是某种标识,服务端根据该标识实例化一个对象。而策略模式的客户端传达给服务端的是一个实例,服务端只是将该实例拿过去在服务端的环境里执行该实例的方法。这就好比一个对汽车不甚了解的人去买车,他在那一比划,说要什么什么样的,销售部门根据他的这个“比划”来形成一份订单,这就是工厂模式下的工作方式。而策略模式下那个顾客就是个行家,他自己给出了订单的详细信息,销售部门只是转了一下手就交给生产部门去做了。通过两相对比,我们不难发现,采用工厂模式必须提供足够灵活的销售部门,如果用户有了新的需求,销售部门必须马上意识到这样才可以做出合适的订单。所以倘一款新车出来了,生产部门和销售部门都需要更新,对顾客来说也需要更新对新车的描述所以需要改动的地方有三处。而策略模式中的销售部门工作比较固定,它只负责接受订单并执行特定的几个操作。当一款新车出来时

设计模式-简单工厂模式[JAVA版]

随声附和 提交于 2019-11-27 10:36:33
2016年苹果春季发布会发布了一款迄今最高性能的4英寸iPhone,那么问题来了,苹果公司的代工厂到底生产多少种尺寸的手机呢? 下面就让简单工厂告诉我们答案吧。 由工厂决定生产哪种型号的的手机,苹果公司的工厂就是一个工厂类,是简单工厂模式的核心类。 iPhone5、iPhone5S、iphone6都是苹果手机,只是型号不同。苹果手机类满足抽象的定义,各个型号的手机类是其具体实现。 简单工厂模式的UML如下: 简单工厂模式的实现 首先创建一个"苹果手机"类,定义一个获取手机尺寸的方法 /** * 苹果手机 * @author songwz * */ public abstract class ApplePhone { /** * 获取尺寸 */ protected abstract void getSize(); } 苹果手机不同型号的"手机类"。 /** * Iphone4 * @author songwz * */ public class Iphone4 extends ApplePhone{ @Override public void getSize () { System. out .println( "iPhone4 屏幕 :3.5 英寸 " ); } } /** * iPhone5 * @author gt780 * */ public class Iphone5

简单工厂设计模式

痞子三分冷 提交于 2019-11-27 09:58:08
* A:简单工厂模式概述 * 又叫静态工厂方法模式,它定义一个具体的工厂类负责创建一些类的实例 * B:优点 * 客户端不需要在负责对象的创建,从而明确了各个类的职责 * C:缺点 * 这个静态工厂类负责所有对象的创建,如果有新的对象增加,或者某些对象的创建方式不同,就需要不断的修改工厂类,不利于后期的维护 * D:案例演示 * 动物抽象类:public abstract Animal { public abstract void eat(); } * 具体狗类:public class Dog extends Animal {} * 具体猫类:public class Cat extends Animal {} * 开始,在测试类中每个具体的内容自己创建对象,但是,创建对象的工作如果比较麻烦,就需要有人专门做这个事情,所以就知道了一个专门的类来创建对象。 * public class AnimalFactory { private AnimalFactory(){} //public static Dog createDog() {return new Dog();} //public static Cat createCat() {return new Cat();} //改进 public static Animal createAnimal(String

[设计模式]简单工厂模式(Simple Factory)

帅比萌擦擦* 提交于 2019-11-27 04:42:46
Code using System; using System.Collections.Generic; using System.Text; namespace Learning.DesignPattern { // 简单工厂模式(Simple Factory) // 产品接口ICar public interface ICar { void Drive(); } // 具体的产品类实现ICar接口 public class HongQi : ICar { public void Drive() { Console.WriteLine( " The driver driving the HongQi! " ); } } public class DaZhong : ICar { public void Drive() { Console.WriteLine( " The driver driving the DaZhong! " ); } } // 工厂类: public class CarFactory { public static ICar DriveCar( string carName) { if (carName == " HongQi " ) { return new HongQi(); } else if (carName == " DaZhong " ) {

设计模式之—简单工厂设计模式

寵の児 提交于 2019-11-26 21:16:19
今天分享设计模式中最简单的一种模式 简单工厂模式。先从面向对象说起,面向对象有三大特性:继承,封装,多态。 所谓封装:在面向对象语言中,我们都是以类来组织代码,类中定义了属性和方法,我们在调用的时候只需要去使用对象的方法名或者属性名就可以了,而不必甚至不需要知道方法的具体实现,类比生活中的例子,榨汁机。我们只知道用它可以榨果汁,放个苹果给我们一杯苹果汁,放个桔子给我们一杯桔子汁就可以了。我们不必要去关心 榨汁机是怎么去工作的。 所谓继承:就是子类继承了父类,父类所有的非私有的方法和属性,子类都可以拿来直接使用。就好比生活中,父亲给儿子留了一笔遗产。你可以直接使用这笔钱而不需要去创造这笔钱然后在去使用。 所谓多态:一个类可以有多个子类,而每个子类只能由一个父类,就好比。一个父亲可以有多个儿子,而每个儿子只可以有一个父亲。对于多态我们有2种理解。第一种是不同的人对同一件事所做的不同反应,例如 工作,对于农民来说就是种地,科学家 搞科研,工人 上班,学生 做作业。第二种是同一个人 在不同情况下,具有不同的身份和角色,例如 同样是你,在公司你可能是员工,在家里 你是你父母的儿子,在路上你是行人。 先来看一个简单的例子: 我们首先定义一个父类Person类: /// <summary> /// 定义父类Person /// </summary> public class Person {

简单工厂模式

孤街浪徒 提交于 2019-11-26 16:31:18
一、内容 不直接向客户端暴露对象创建的实现细节,而是通过一个工厂类来负责创建产品类的实例。 二、角色 工厂角色(Creator) 抽象产品角色(Product) 具体产品角色(Concrete Product) 三、优点 隐藏了对象创建的实现细节 客户端不需要修改代码 四、缺点 违反了单一职责原则,将创建逻辑集中到一个工厂类中 当添加新产品时,需要修改工厂类代码,违反了开放封闭原则 五、代码示例 初始的代码 from abc import abstractmethod,ABCMeta 2 class Payment(metaclass=ABCMeta): 3 @abstractmethod 4 def pay(self): 5 pass 6 7 class Alipay(Payment): 8 def __init__(self,money): 9 self.money = money 10 11 def pay(self): 12 print('支付宝支付了%s元'%self.money) 13 14 class Whatpay(Payment): 15 def __init__(self, money): 16 self.money = money 17 18 def pay(self): 19 print('微信支付了%s元' % self.money) 20 21 22