JAVA网页编程之计划形式之Factory深切研讨
最初被命名为Oak,目标设定在家用电器等小型系统的编程语言,来解决诸如电视机、电话、闹钟、烤面包机等家用电器的控制和通讯问题。计划明天我往市场,要决意是买生果等产物,仍是选择种生果的产物。详细怎样操纵本人选择。离开市场,我发明次要有一些生果:苹果(Apple),葡萄(Grape)和鸭梨(Pear)。究竟买甚么好呢?我一阵思考。俗语说:“饭后一只烟,胜过活仙人。饭后吃苹果,西施见我躲。”为了妻子的大度,我决意买苹果。
上面入手下手Factory形式研讨,固然是用我下面举的例子来讲明。
SimpleFactory形式
专门界说一个类来卖力创立别的类的实例,被创立的实例一般都具有配合的父类。
FactoryMethod形式
将对象的创立交由父类中界说的一个尺度办法来完成,而不是其机关函数,事实应当创立何种对象由详细的子类卖力决意。
AbstractFactory形式
供应一个配合的接口来创立互相联系关系的多个对象。
1、SimpleFactory形式:
1、在这里,我们先界说生果(Fruit)接口:
publicinterfaceFruit{
voidplant();//生果是被栽培的
voidenableEat();//生果能吃
}
2、苹果(Apple)是对生果(Fruit)接口的完成:
publicclassAppleimplementsFruit{
publicvoidplant(){
System.out.println("种苹果!");
}
publicvoidenableEat(){
System.out.println("苹果好吃!");
}
}
3、葡萄(Grape)是对生果(Fruit)接口的完成:
publicclassGrapeimplementsFruit{
publicvoidplant(){
System.out.println("种葡萄!");
}
publicvoidenableEat(){
System.out.println("葡萄好吃!");
}
}
4、鸭梨(Pear)是对生果(Fruit)接口的完成:
publicclassPearimplementsFruit{
publicvoidplant(){
System.out.println("种鸭梨!");
}
publicvoidenableEat(){
System.out.println("鸭梨好吃!");
}
}
5、界说买生果(BuyFruit)这一历程类:
publicclassBuyFruit{
/**
复杂工场办法
*/
publicstaticFruitbuyFruit(Stringwhich){
if(which.equalsIgnoreCase("apple")){//假如是苹果,则前往苹果实例
returnnewApple();
}
elseif(which.equalsIgnoreCase("pear")){//假如是鸭梨,则前往鸭梨实例
returnnewStrawberry();
}
elseif(which.equalsIgnoreCase("grape")){//假如是葡萄,则前往葡萄实例
returnnewGrape();
}
else{
returnnull;
}
}
}
6、编写测试类:
publicclassFruitTest{
publicstaticvoidmain(Stringargs[]){
BuyFruitbuy=newBuyFruit();//入手下手买生果这个历程
buy.buyFruit("apple").enableEat();//挪用苹果的enableEat()办法
}
}
7、申明:
A:我要购置苹果,只需向工场脚色(BuyFruit)哀求便可。而工场脚色在接到哀求后,会自行判别创立和供应哪个产物。
B:可是关于工场脚色(BuyFruit)来讲,增添新的产物(好比说增添草莓)就是一个疾苦的历程。工场脚色必需晓得每种产物,怎样创立它们,和什么时候向客户端供应它们。换言之,回收新的产物意味着修正这个工场。
C:因而SimpleFactory形式的开放性对照差。
有甚么举措能够办理这个成绩吗?那就必要FactoryMethod形式来为我们服务了。
2、FactoryMethod形式:
1、一样,我们先界说生果(Fruit)接口:
publicinterfaceFruit{
voidplant();//生果是被栽培的
voidenableEat();//生果能吃
}
2、苹果(Apple)是对生果(Fruit)接口的完成:
publicclassAppleimplementsFruit{
publicvoidplant(){
System.out.println("种苹果!");
}
publicvoidenableEat(){
System.out.println("苹果好吃!");
}
}
3、葡萄(Grape)是对生果(Fruit)接口的完成:
publicclassGrapeimplementsFruit{
publicvoidplant(){
System.out.println("种葡萄!");
}
publicvoidenableEat(){
System.out.println("葡萄好吃!");
}
}
4、鸭梨(Pear)是对生果(Fruit)接口的完成:
publicclassPearimplementsFruit{
publicvoidplant(){
System.out.println("种鸭梨!");
}
publicvoidenableEat(){
System.out.println("鸭梨好吃!");
}
}
5、在这里我们将买生果(BuyFruit)界说为接口类:
publicinterfaceBuyFruit{
/**
工场办法
*/
publicFruitbuyFruit();//界说买生果这一历程
}
6、买苹果是(BuyApple)对买生果(BuyFruit)这个接口的完成
publicclassBuyAppleimplementsBuyFruit{
publicFruitbuyFruit(){
returnnewApple();//前往苹果实例
}
}
7、买鸭梨是(BuyPear)对买生果(BuyFruit)这个接口的完成
publicclassBuyPearimplementsBuyFruit{
publicFruitBuyPear(){
returnnewPear();//前往鸭梨实例
}
}
8、买葡萄是(BuyGrape)对买生果(BuyFruit)这个接口的完成
publicclassBuyGrapeimplementsBuyFruit{
publicFruitBuyGrape(){
returnnewGrape();//前往葡萄实例
}
}
9、编写测试类:
publicclassFruitTest{
publicstaticvoidmain(Stringargs[]){
BuyApplebuy=newBuyApple();//入手下手买生果这个历程
buy.buyFruit().enableEat();//挪用苹果的enableEat()办法
}
}
10、申明:
A:工场办法形式和复杂工场形式在布局上的分歧是很分明的。工场办法形式的中心是一个笼统工场类,而复杂工场形式把中心放在一个详细类上。工场办法形式能够同意良多详细工场类从笼统工场类中将创立举动承继上去,从而能够成为多个复杂工场形式的综合,进而推行了复杂工场形式。
B:工场办法形式退步后能够变得很像复杂工场形式。假想假如十分断定一个体系只必要一个详细工场类,那末就无妨把笼统工场类兼并到详细的工场类中往。因为归正只要一个详细工场类,以是无妨将工场办法改成为静态办法,这时候候就失掉了复杂工场形式。
C:假如必要到场一个新的生果,那末只必要到场一个新的生果类和它所对应的工场类。没有需要修正客户端,也没有需要修正笼统工场脚色大概其他已有的详细工场脚色。关于增添新的生果类而言,这个体系完整撑持“开-闭”准绳。
D:对FactoryMethod形式而言,它只是针对一品种别(如本例中的生果类Fruit),但假如我们还想买肉,那就不可了,这是就必需要AbstractFactoryMethod形式协助了。
3、AbstractFactory形式
1、一样,我们先界说生果(Fruit)接口:
publicinterfaceFruit{
voidplant();//生果是被栽培的
voidenableEat();//生果能吃
}
2、苹果(Apple)是对生果(Fruit)接口的完成:
publicclassAppleimplementsFruit{
publicvoidplant(){
System.out.println("种苹果!");
}
publicvoidenableEat(){
System.out.println("苹果好吃!");
}
}
3、葡萄(Grape)是对生果(Fruit)接口的完成:
publicclassGrapeimplementsFruit{
publicvoidplant(){
System.out.println("种葡萄!");
}
publicvoidenableEat(){
System.out.println("葡萄好吃!");
}
}
4、鸭梨(Pear)是对生果(Fruit)接口的完成:
publicclassPearimplementsFruit{
publicvoidplant(){
System.out.println("种鸭梨!");
}
publicvoidenableEat(){
System.out.println("鸭梨好吃!");
}
}
5、界说肉(Meat)接口:
publicinterfaceMeat{
voidfeed();//肉是豢养的
voidenableEat();//肉能吃
}
6、猪肉(BigMeat)是对肉(Meat)接口的完成:
publicclassBigMeatimplementsMeat{
publicvoidfeed(){
System.out.println("养猪!");
}
publicvoidenableEat(){
System.out.println("猪肉好吃!");
}
}
7、牛肉(CowMeat)是对肉(Meat)接口的完成:
publicclassCowMeatimplementsMeat{
publicvoidfeed(){
System.out.println("养牛!");
}
publicvoidenableEat(){
System.out.println("牛肉好吃!");
}
}
8、我们能够界说买货人(Buyer)接口:
publicinterfaceBuyer{
/**
买生果工场办法
*/
publicFruitbuyFruit(FruitwhichFruit);
/**
买肉的工场办法
*/
publicMeatbuyMeat(MeatwhichMeat);
}
9、我(MyBuyer)是对买货人(Buyer)接口的完成:
publicclassMyBuyerimplementsBuyer{
/**
买生果工场办法
*/
publicFruitbuyFruit(FruitwhichFruit){
returnwhichFruit;
}
/**
买肉的工场办法
*/
publicMeatbuyMeat(MeatwhichMeat){
returnwhichMeat;
}
}
10、编写测试类:
publicclassMyBuyerAbstractTest{
publicstaticvoidmain(Stringargs[]){
Fruitapple=newApple();//苹果实例
Meatbig=newBigMeat();//猪肉实例
MyBuyermy=newMyBuyer();//我是买者的实例
my.buyFruit(apple).enableEat();//我买苹果
my.buyMeat(big).enableEat();//我买猪肉
}
}
11、申明:
A:笼统工场形式能够向客户端供应一个接口,使得客户端在不用指定产物的详细范例的情形下,创立多个产物族中的产物对象。这就是笼统工场形式的意图。
B:笼统工场形式是一切形状的工场形式中最为笼统和最具一样平常性的一种形状。
Java编译的是字节码,跟C++相反,启动不够快,效率不够高,难以精确控制内存,但是优点是编程比C++容易,代码比较安全但是容易留下性能隐患,跨平台靠字节码在各个平台复制(一处编译到处调试) Java 编程语言的风格十分接近C、C++语言。 是一种语言,用以产生「小应用程序(Applet(s)) 所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。 http://www.jdon.com/去下载,或到同济技术论坛的服务器ftp://nro.shtdu.edu.cn去下,安装上有什么问题,可以到论坛上去提问。 是一种语言,用以产生「小应用程序(Applet(s)) 你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。 一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从 是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言 如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。 是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能 是一种突破用户端机器环境和CPU 有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想) 设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧 至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。 吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧 是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言 你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢? 你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。 当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
页:
[1]