当前位置: 首页 > news >正文

宁波网站制作企业wordpress主题 免

宁波网站制作企业,wordpress主题 免,seo技术培训宁波,网站建站加盟2016-04-24 10:10:34创建型模式#xff1a;工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式注意#xff1a;工厂模式可以分为三类#xff1a; 1)简单工厂模式(Simple Factory) 2)工厂方法模式(Factory Method) 3)抽象工厂模式(Abstract Factory)这三种模式从上…2016-04-24 10:10:34创建型模式工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式注意工厂模式可以分为三类 1)简单工厂模式(Simple Factory) 2)工厂方法模式(Factory Method) 3)抽象工厂模式(Abstract Factory)这三种模式从上到下逐步抽象并且更具一般性。而GOF在《设计模式》一书中将工厂模式分为两类工厂方法模式(Factory Method)与抽象工厂模式(Abstract Factory)这是将简单工厂模式(Simple Factory)看成了工厂方法模式的一种特例两者归为了一类。工厂方法模式(1)简单工厂模式(又叫静态工厂方法模式)通过专门定义一个类来负责创建其他类的实例被创建的实例通常都具有共同的父类。模式中包含的角色及其职责1.工厂(Creator)角色简单工厂模式的核心它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用创建所需的产品对象。2.抽象(Product)角色简单工厂模式所创建的所有对象的父类它负责描述所有实例所共有的公共接口。3.具体产品(Concrete Product)角色简单工厂模式所创建的具体实例对象例子采集水果如苹果、香蕉Apple和Banana是具体产品角色Fruit是抽象角色是Apple和Banana的公共接口FruitFactory是工厂角色负责创建Apple和Banana实例。public interfaceFruit {/** 采集*/public voidget();}public class Apple implementsFruit{/** 采集*/public voidget(){System.out.println(采集苹果);}}public class Banana implementsFruit{/** 采集*/public voidget(){System.out.println(采集香蕉);}public classFruitFactory {/** 获得Apple类的实例*/public staticFruit getApple() {return newApple();}/** 获得Banana类实例*/public staticFruit getBanana() {return newBanana();}}public classMainClass {public static voidmain(String[] args) {Fruit appleFruitFactory.getApple();Fruit bananaFruitFactory.getBanana();apple.get();banana.get();}还可以如下修改FruitFactory类public classFruitFactory {/** getFruit方法获得所有产品对象*/public static Fruit getFruit(String type) throwsInstantiationException, IllegalAccessException, ClassNotFoundException {Class fruitClass.forName(type);return(Fruit) fruit.newInstance();}}这样动态的加载和创建Class类但是没有注意大小写进一步修改为public classFruitFactory {/** getFruit方法获得所有产品对象*/public static Fruit getFruit(String type) throwsInstantiationException, IllegalAccessException, ClassNotFoundException {if(type.equalsIgnoreCase(apple)) {return Apple.class.newInstance();}else if(type.equalsIgnoreCase(banana)) {return Banana.class.newInstance();}else{System.out.println(找不到相应的实例化类);return null;}}}然后public classMainClass {public static void main(String[] args) throwsInstantiationException, IllegalAccessException, ClassNotFoundException {Fruit apple FruitFactory.getFruit(Apple);Fruit banana FruitFactory.getFruit(Banana);apple.get();banana.get();}}简单工厂模式的优缺点在这个模式中工厂类是整个模式的关键所在。它包含必要的判断逻辑能够根据外界给定的信息决定究竟应该创建哪个具体类的对象。用户在使用时可以直接根据工厂类去创建所需的实例而无需了解这些对象是如何创建以及如何组织的。有利于整个软件体系结构的优化。不难发现简单工厂模式的缺点也正体现在其工厂类上由于工厂类集中了所有实例的创建逻辑所以“高内聚”方面做的并不好。另外当系统中的具体产品类不断增多时可能会出现要求工厂类也要做相应的修改扩展性并不很好。例如增加一种水果-梨子需要在FruitFactory中继续增加else if语句不符合开放封闭原则。这时候考虑下面的工厂方法模式。(2)工厂方法模式(又叫多态工厂模式)工厂方法模式的意义是定义一个创建产品对象的工厂接口将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建这样核心类成为一个抽象工厂角色仅负责具体工厂子类必须实现的接口这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。模式中包含的角色及其职责1.抽象工厂(Creator)角色工厂方法模式的核心任何工厂类都必须实现这个接口。2.具体工厂( ConcreteCreator)角色具体工厂类是抽象工厂的一个实现负责实例化产品对象。3.抽象(Product)角色工厂方法模式所创建的所有对象的父类它负责描述所有实例所共有的公共接口。4.具体产品(Concrete Product)角色工厂方法模式所创建的具体实例对象例子采集水果如苹果、香蕉、梨子Apple、Banana、Pear是具体产品角色Fruit是抽象角色是Apple、Banana、Pear的公共接口。他们的构造和前面简单工厂模式中一样。AppleFactory、BananaFactory、PearFactory是具体工厂角色负责创建Apple、Banana、Pear的实例FruitFactory是抽象工厂角色是AppleFactory、BananaFactory、PearFactory的公共接口。public interfaceFruitFactory {//水果厂publicFruit getFruit();}public class AppleFactory implementsFruitFactory {//苹果厂返回苹果实例publicFruit getFruit() {return newApple();}}public class BananaFactory implementsFruitFactory {//香蕉厂返回香蕉实例publicFruit getFruit() {return newBanana();}}public class PearFactory implementsFruitFactory {//梨子厂返回梨子实例publicFruit getFruit() {return newPear();}}public classMainClass {public static voidmain(String[] args) {//获得AppleFactoryFruitFactory ff newAppleFactory();//通过AppleFactory来获得Apple实例对象Fruit apple ff.getApple();apple.get();//获得BananaFactoryFruitFactory ff2 newBananaFactory();//通过BananaFactory来获得Banana实例对象Fruit banana ff2.getBanana();banana.get();//获得PearFactoryFruitFactory ff3 newPearFactory();//通过PearFactory来获得Pear实例对象Fruit pear ff3.getPear();pear.get();}}和简单工厂模式比较工厂方法类的核心是一个抽象工厂类而简单工厂模式把核心放在一个具体类上。工厂方法模式之所以有一个别名叫多态性工厂模式是因为具体工厂类都有共同的接口或者有共同的抽象父类。当系统扩展需要添加新的产品对象时仅仅需要添加一个具体对象以及一个具体工厂对象原有工厂对象不需要进行任何修改也不需要修改客户端很好的符合了“开放封闭”原则。而简单工厂模式在添加新产品对象后不得不修改工厂方法扩展性不好。工厂方法模式退化后可以演变成简单工厂模式。抽象工厂模式抽象工厂模式是所有形态的工厂模式中最为抽象和最其一般性的。抽象工厂模式可以向客户端提供一个接口使得客户端在不必指定产品的具体类型的情况下能够创建多个产品族的产品对象。Apple、Pear属于产品等级结构Apple又分南方Apple和北方ApplePear也分南方Pear和北方Pear。一个工厂负责生产南方的Apple、Pear这是一个产品族一个工厂负责生产北方的Apple、Pear这是另一个产品族。模式中包含的角色及其职责1.抽象工厂(Creator)角色抽象工厂模式的核心包含对多个产品结构的声明任何工厂类都必须实现这个接口。2.具体工厂( Concrete  Creator)角色具体工厂类是抽象工厂的一个实现负责实例化某个产品族中的产品对象。3.抽象(Product)角色抽象模式所创建的所有对象的父类它负责描述所有实例所共有的公共接口。4.具体产品(Concrete Product)角色抽象模式所创建的具体实例对象注意抽象工厂中方法对应产品结构具体工厂对应产品族。FruitFactory是抽象工厂角色里面声明了苹果和梨子SouthFactory和NorthFactory是具体工厂角色SouthFactory返回南方苹果和梨子实例NorthFactory返回北方苹果和梨子实例。public interfaceFruit {/** 采集*/public voidget();}public abstract class Apple implementsFruit{/** 采集苹果*/public abstract voidget();}public abstract class Pear implementsFruit{/** 采集梨子*/public abstract voidget();}public class SouthApple extendsApple {public voidget() {System.out.println(采集南方苹果);}}public class NorthApple extendsApple {public voidget() {System.out.println(采集北方苹果);}}public class SouthPear extendsPear {public voidget() {System.out.println(采集南方梨子);}}public class NorthPear extendsPear {public voidget() {System.out.println(采集北方梨子);}}public interfaceFruitFactory {//实例化ApplepublicFruit getApple();//实例化PearpublicFruit getPear();}public class SouthFruitFactory implementsFruitFactory {publicFruit getApple() {return newSouthApple();}publicFruit getPear() {return newSouthPear();}}public class NorthFruitFactory implementsFruitFactory {publicFruit getApple() {return newNorthApple();}publicFruit getPear() {return newNorthPear();}}public classMainClass {public static voidmain(String[] args) {FruitFactory ff newNorthFruitFactory();Fruit appleff.getApple();apple.get();Fruit bananaff.getPear();pear.get();FruitFactory ff2 newSouthFruitFactory();Fruit apple2ff2.getApple();apple2.get();Fruit banana2ff2.getPear();pear2.get();}}如果再增加一个产品族温室水果包括温室苹果和温室梨子只要增加相应的温室苹果类、温室梨子类和温室工厂类符合“开放-封闭“”原则。但是若增加的是一个产品如香蕉则会违反该原则。补充工厂模式在开发中的应用一个简单的计算器(主要是加法运算)OperationFactory是抽象工厂类AddOperationFactory是具体工厂类Operation是抽象角色类AddOperation和SubtractionOperation是具体角色类。public abstract classOperation {private doublenum1;private doublenum2;public doublegetNum1() {returnnum1;}public void setNum1(doublenum1) {this.num1 num1;}public doublegetNum2() {returnnum2;}public void setNum2(doublenum2) {this.num2 num2;}public abstract doublegetResult();}public class AddOperation extendsOperation {public doublegetResult() {double result this.getNum1() this.getNum2();returnresult;}}public class SubtractionOperation extendsOperation {public doublegetResult() {double result this.getNum1() - this.getNum2();returnresult;}}public interfaceOperationFactory {publicOperation getOperation();}public class AddOperationFactory implementsOperationFactory{publicOperation getOperation() {return newAddOperation();}}importjava.util.Scanner;public classMainClass {public static voidmain(String[] args) {//1.接受控制台输入System.out.println(---计算器程序---);System.out.println(输入第一个操作数);Scanner scanner newScanner(System.in);String strNum1scanner.nextLine();System.out.println(输入运算符);String operscanner.nextLine();System.out.println(输入第二个操作数);String strNum2scanner.nextLine();double result 0;double num1 Double.parseDouble(strNum1);double num2 Double.parseDouble(strNum2);//2.进行运算if(.equals(oper)) {OperationFactory factory newAddOperationFactory();Operation operationfactory.getOperation();operation.setNum1(num1);operation.setNum2(num2);resultoperation.getResult();}//3.返回结果System.out.println(strNum1 oper strNum2 result);}
http://www.pierceye.com/news/473672/

相关文章:

  • react 网站开发seo软件资源
  • 中国最大免费wap网站怎样才能建设只是于自己的网站
  • 装修网站平台排行榜wordpress做视频网站吗
  • flash网站建设价格播放器网站怎么做
  • 微网站 源码 免费文本编辑器 网站
  • 电商网站通用左侧弹出导航有南昌网站优化公司
  • 沈阳三好街做网站公司个人网页设计风格分析
  • 网站建设经费计划内容网站建设中存在的问题
  • 天凡建设股份有限公司网站苍山网站建设
  • 如何新建网站dw线下推广的渠道和方法
  • 网站友链wordpress火车头发布
  • 青海网站维护公司自己的网站叫什么
  • 微网站 淘宝客wordpress备案号放置
  • html5 手机网站 模版网站信息员队伍建设
  • 基金会网站开发方案政务公开网站建设重点
  • 影视网站制作网页游戏的软件
  • 企业做网站的费用如何科目青色网站欣赏
  • 做视频网站怎么赚钱的网站开发流程的三个部分
  • 牡丹江市建设行业协会网站广西住房城乡建设厅网站首页
  • 重庆网站关键词排名优化免费网页代理的推荐
  • 定制型网站怎么做重庆软件开发公司有哪些
  • 自适应型网站建设网站建设搭建是什么意思
  • 网站建设能够不同地方网址大全12345
  • 做网批那个网站好校园网站界面建设
  • 免费网站建设php济南网站建设公司官网
  • 徐汇网站推广网络营销的四个特点
  • 简易做网站wordpress插件tag
  • 红酒 公司 网站建设青岛安装建设股份公司网站
  • 小米路由hd 做网站营销型网站策划 建设的考试题
  • 运河网站制作自主建站平台