C#学习笔记-工厂模式】的更多相关文章

设计模式 工厂模式:定义一个创建对象的接口,但由子类决定要实例化的是哪一个.工厂方法让类把实例化推迟到子类. 所谓的"决定",并非指模式同意子类本身在执行时做决定,而是指在编写创建者类时.不须要知道实际创建的产品是哪一个. 选择了使用这个子类,就自然的决定了实际创建的产品是什么. 抽象工厂模式:提供一个接口,用于创建相关或依赖对象的家族.而不须要指定详细类. 抽象工厂的任务时定义一个负责创建一组产品的接口.这个接口内的每一个产品都负责创建一个详细产品.使用工厂方法. 设计原则 (1)多…
Product是我们所需要获得的对象,一般的使用中,我们直接通过new获得新对象. 当需要大量获得对象时,每一次都new会很麻烦. <真菌世界>游戏中,一个星球上有很多树,一棵树会不断生成真菌.星球是场景,树就是工厂,真菌就是产品.场景不用关心如何生成一种特定类型的真菌,真菌的属性由生产它的工厂负责就行了. 简单代码示例: C++示例 BaseFungus.h #pragma once class CBaseFungus { public: CBaseFungus(void); ~CBaseF…
题目:计算器 解析:工厂方法(Factory Method),定义一个用于创建对象的接口,让子类决定实例化哪一个类. 定义运算类: class Operation { ; ; public double NumberA { get { return _numberA; } set { _numberA = value; } } public double NumberB { get { return _numberB; } set { _numberB = value; } } public v…
一.概述 1.抽象工厂:当情况是需要产生一系列产品,若需更换产品,则要求一系列产品一起换,且要控制一系列产品的产生过程,此时可考虑抽象工厂模式.例:小明装修屋子,把电视.冰箱都替换掉,他这次需要把电视.冰箱换成三星的,下次装修可能要换成海尔的.此时可设计抽象类Telveison及Fridge负责产生产品,抽象工厂AbstractFactory负责产生一系列产品 PS:抽象工厂与普通工厂各自的优缺点: (1)普通工厂容易在产品维度进行扩展,但产生系列产品时不方便,且易造成工厂类泛滥 (2)抽象工厂…
一.概述 1.目标:要控制任意类型交通工具的生产模式 2.目标有两层意思(1)任意类型 (2)生产模式,所以对应的,要这两个层面上抽象(Movable,VehicleFactory),利用接口,实现多态 二.类结构 1.Interface Movable.java 2.Car.java 3.Plane.java 4.Interface VehicleFactory.java 5.CarFactory.java 6.PlaneFactory.java 三.代码 1.Movable.java pub…
一.概述 1.目标:模拟Spring的Ioc 2.用到的知识点:利用jdom的xpath读取xml文件,反射 二.有如下文件: 1.applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans> <bean id="vehicle" class="com.tong.spring.factory.Car"> </…
一.目标:读取properties文件,获得类名来生成对象 二.类 1.Movable.java public interface Movable { void run(); } 2.Car.java public class Car implements Movable { public void run() { System.out.println("Car running..............."); } } 3.spring.properties PS:"=&q…
一.单例的作用是用于控制类的生成方式,而不让外部类任意new对象 1.Car.java import java.util.ArrayList; import java.util.List; public class Car { //私有化构造函数,防止被外部的类new private Car() { } private static Car car = new Car(); //单例 private static List<Car> cars = new ArrayList<Car>…
<Head first设计模式>学习笔记 – 迭代器模式 代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示. 爆炸性新闻:对象村餐厅和对象村煎饼屋合并了!真是个好消息!现在我们可以在同一个地方,享用煎饼屋美味的煎饼早餐,和好吃的餐厅午餐了.但是,好像有一点小麻烦:新的餐厅想用煎饼屋菜单当作早餐的菜单,使用餐厅的菜单当做午餐的菜单,大家都同意了这样实现菜单项.但是大家无法同意菜单的实现.煎饼屋使用ArrayList记录他的菜单项,而餐厅使用的是数组.他们两个都不愿意改…
我们是在使用Spring框架的过程中,其实就是为了使用IOC,依赖注入,和AOP,面向切面编程,这两个是Spring的灵魂. 主要用到的设计模式有工厂模式和代理模式. IOC是工厂模式参考:设计模式-工厂模式-场景以及优缺点-目的就是应对变化 (国江面试回答的) AOP代理模式参考:设计模式-代理模式(Proxy) 参考:深入理解Java反射+动态代理 IOC就是典型的工厂模式,通过sessionfactory去注入实例. AOP就是典型的代理模式的体现. 可以参考:Spring 学习 3- A…
抽象工厂模式,可以向客户端提供一个接口,而客户端不用指定具体的类型创建对象,却能够创建多个产品族(一类具有共性产品,如地域等)的对象. 下面直接上代码. 1.苹果需要实现水果的接口,而苹果可以有北方的苹果,也可以有南方的苹果,所以也可以抽象成一个父类. public interface Fruit { public void Get(); } public abstract class Apple implements Fruit{ public abstract void Get(); } 2…
题目:做一个商场收银的小程序,可能会出现的情况包括:正常收费,九折优惠,七折优惠,满300减50等各种不同随时会变化的优惠活动. 界面如下: 分析: 首先我们对于收钱写一个父类CashSuper.这个父类是用来包含其他的各种收费方式的:正常收费.七折优惠.八折优惠.九折优惠.满300减50.满400减70.满500减100等情况,其中折扣优惠虽然不同,但是类型相似,满减优惠同理,故此我们可以将正常收费.折扣优惠与满减优惠分别划分为三个不同的类:CashNormal.CashRebate.Cash…
在Java(或者叫做面向对象语言)的世界中,工厂模式被广泛应用于项目中,也许你并没有听说过,不过也许你已经在使用了.Java 设计模式之工厂模式 简单来说,工厂模式的出现源于增加程序序的可扩展性,降低耦合度.之所以叫做工厂模式,是用工厂生产产品来形象的比喻代码中生产对象的过程.总体来说,工厂模式分为以下几种: 简单工厂模式(Simple Factory Pattern) 工厂方法模式(Factory Method Pattern) 抽象工厂模式(Abstract Factory Pattern)…
我的认为:所为工厂模式是事先有一系类class,一个工厂类' 工厂类根据不同的参数创建不同的对象,调用各自的方法; php利用工厂模式实现计算器: ?php /** * Created by PhpStorm. * User: modern * Date: 16-7-19 * Time: 下午5:24 * 简单工厂模式两数运算器 */ echo "hello factory models<br/>"; echo "begin<br/>"; i…
工厂模式 工厂模式(Factory Pattern)是Java中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在工厂模式中,创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象. 工厂模式的思路:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行.使用过程中做好接口选择. 优点:1.一个调用者向创建一个对象,只要知道名称就可以了.2.扩展性高,如果想增加一个产品,只要扩展一个工厂…
<?php //工厂模式 interface Doing { function eat(); function sleep(); } class Cat implements Doing { function eat() { echo '猫正在吃东西!<br />'; } function sleep() { echo '猫正在睡觉!<br />'; } } class Dog implements Doing { function eat() { echo '狗正在吃东西!…
模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以详细方法以及详细构造函数的形式实现.然后声明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类能够以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现.这就是模板方法模式的用意. 设计模式 模板方法模式:在一个方法中定义一个算法的框架,而将一些步骤延迟到子类中.模板方法使得子类能够在不改变算法结果的情况下,又一次定义算法中的某些步骤. 模板就是一个方法.这种方法将算法定义成一组步骤.当中的不论什么步骤都能够是抽象的,由子类负责实现.这样…
解释器模式,其实就是编译原理中的语法解释器,如果用在项目中,可以用于实现动态脚本的解析,也就是说项目可以支持用户脚本扩展. 但实际上,这种运行时解释,效率很慢,如果不是很需要的话,不建议使用. 一种简单实现: Context是上下文场景,比如做一个计算器,那这个Context可以作为一个Calculator类,可以在构造函数中用于接受待解析的表达式(如 a+b-c),以及执行相应的解释. Expression代表不同的symbol的操作,比如: 1.+对应的Expression,操作是:将+的左…
Dispose模式是.NET中很基础也很重要的一个模式,今天重新复习一下相关的东西并记录下来. 什么是Dispose模式? 什么时候我们该为一个类型实现Dispose模式 使用Dispose模式时应该注意什么? 怎样实现一个Dispose模式? Dispose模式的例子 什么是Dispose模式? 要知道什么是Dispose模式必须先了解两个概念:资源和GC的基本原理.资源指的是一些类似于Windows句柄,数据库连接的非内存的一些本地资源,这些资源无法被运行时本身管理,需要程序员自己去申请和释…
JQuery插件开发http://www.cnblogs.com/damonlan/archive/2012/04/06/2434460.html github教程:https://github.com/i5ting/How-to-write-jQuery-plugin jQuery插件开发 一般来说,jQuery插件的开发分为两种:一种是挂在jQuery命名空间下的全局函数,也可称为静态方法:另一种是jQuery对象级别的方法,即挂在jQuery原型下的方法,这样通过选择器获取的jQuery对…
一.概述 命令模式 二.代码 1.Client.java public class Client { public void request(Server server){ server.addCommand(new TextCommand()); server.addCommand(new ImageCommand()); server.doSomething(); } } 2.Server.java public class Server { private List<Command> c…
一.概述 1.桥接模式的应用情况:(1)两个维度扩展(2)排列组合 二.代码 1.Gift.java public class Gift { protected GiftImpl giftImpl; } 2.GiftImpl.java public class GiftImpl { } 3.WarmGift.java public class WarmGift extends Gift { public WarmGift(GiftImpl giftImpl) { //调用父类的giftImpl…
在软件开发过程中.应用程序可能会依据不同的情况作出不同的处理. 最直接的解决方式是将这些全部可能发生的情况全都考虑到.然后使用if... ellse语句来做状态推断来进行不同情况的处理. 可是对复杂状态的推断就显得"力不从心了". 随着添加新的状态或者改动一个状体(if else(或switch case)语句的增多或者改动)可能会引起非常大的改动,而程序的可读性,扩展性也会变得非常弱.维护也会非常麻烦. 那么我就考虑仅仅改动自身状态的模式.----题记 设计模式 状态模式:同意对象在…
迭代模式设置共生死亡,一般来说.我们只是想实现一个集,我们需要的同时提供这个集合的迭代器,喜欢java中间Collection.List.Set.Map等,这些集合都有自己的迭代器.假如我们要实现一个这种新的容器,当然也须要引入迭代器模式.给我们的容器实现一个迭代器.----题记 设计模式 迭代器模式:提供一种方法顺序訪问一个聚合对象中的各个元素,而不暴露其内部的表示. 把游走的任务放在迭代器上.而不是聚合上. 这样简化了聚合的接口和实现.也让责任各得其所. 组合模式:同意你将对象组合成树形结构…
迭代器模式,使用很多,但是很少实现.常用的集合都支持迭代器. 集合中的CreateIterator()可用于创建自己的迭代器,在里面通过调用迭代器的构造函数Iterator(Aggregate)来绑定自己到迭代器中,如果不使用此方法,也可以在场景中直接new Iterator(Aggregate)来得到一个迭代器.迭代器中的接口First()等其实本质都是操作引用的Aggregate对象实现的.好处在于不用集合自己来写迭代方法,一是可以复用迭代器,减少每种集合都去造轮子,二是看起减少了集合的接口…
访问者模式,通过Visitor的注入,为Element扩展了方法实现.虽然避免了Element不用修改即可修改,但却破坏了类的封装性,同时,一旦变更就需要增加子类,在子类方法中调用基类方法,然后再使用Visitor的方法来扩展. 个人理解,Visitor有点类似于策略模式中的算法,都是通过组合的方法变换原有实现.但访问者的变换粒度是具体函数内部要实现扩展,而策略模式主要是算法实现的替换.…
命令模式,将具体操作Receiver封在Command中,调用类只需要知道Command即可.…
备忘录模式,可以将当前状态保存,并随时恢复. Originator存在状态state,当需要保存此状态时,通过CreateMemento创建一个备忘录对象Memento保存此状态:而需要恢复相应状态时,使用RestoreMemento(memento)将相应的状态恢复回来.…
状态模式,主要是用于存在大量case判断的操作执行,同时这些case依赖于对象的状态,那么就可以将大量的case判断封装为独立的类. Context: -state,当前状态对象. ChangeState(state),切换state对象. OperationInterface(),调用State->OperationInterface. OperationChangeState(),调用State->OperationChangeState(Context). State: ChangeSt…
策略模式,与模板模式一样,都是为了将接口和算法实现解耦,但策略模式更主要是整体算法的替换,而模板模式主要是流程一致,部分算法的替换. 个人理解为,一般算法替换,使用策略模式,当算法流程一致,可以提取为模板模式.实际中,策略模式,使用组合方式,将算法实现脱离上下文,上下文可以依据需要,使用不同的算法实现子类,效果比继承更好.…