锈才学设计模式之 —— 工厂模式(一)
工厂方法模式:工厂模式能封装具体类型的实例化,工厂方法模式定义了一个创建对象的接口,但是由子类通过继承抽象方法来决定实例化那一个类,将类的实例化放在子类中.
说明:在实例化具体类时,都是采用JAVA中的new关键字,这样就将具体类固定了,当需要利用其它产品时,必须修改代码实例化其它产品类,这样就失去了灵活性,丢失了OO的多态、封装、抽象等重要特性,下面是实例化例子:
== 实例化类 ==
Product product = new concreteProduct ();
大部人都会采用灵活一点的方式来实例化类,比如用一个方法来根据条件实例化类:
== 根据判断实例化类 ==
package com.jody.pattern.factory;
public class ProductOperation {
public void operation(String type){
if("concrete".equals(type)){
Product product = new ConcreteProduct(); //实例具体产品
}else if("other".equals(type)){
//实例其它产品
}
}
}
如果再遵守OO思想,把不变化的抽象出来,就可以将实例化类单独拿出来定义一个类,这个类专门负责生产产品,我们叫它工厂。比如:
== 静态实例化工厂类 ==
package com.jody.pattern.factory;
public static class ProductFactory {
public Product instance(String type){
Product product = null;
if("concrete".equals(type)){
product = new ConcreteProduct();
}else if("other".equals(type)){
//实例其它产品
product = .;
}
return product;
}
}
== 产品工厂类 ==
package com.jody.pattern.factory;
public class ProductOperation {
Product product;
public void operation(String type){
product = ProductFactory.instance(type);//用静态工厂生成产品
}
}
这种方式,只是将实例化单独定义一个类,当新增加一个产品(Product)时,就需要修改工厂内生成产品的定义(public Product instance(String type)),这样需要修改工厂的代码,以增加对新增产品的支持,显然这是不够弹性,根据OO思想:面向扩展开放,面向修改关闭,我们就需要采用工厂方法模式,将工厂抽象出来,面向接口(抽象)而不是面向实现进行设计编程。
工厂方法模式的结构
下面针对工厂方法模型进行代码描述
== 工厂接口(抽象)类 ==
package com.jody.pattern.factory;
//工厂方法接口(抽象)
public abstract class Creator {
public void operation(String type){
Product product;
//子类实现了些方法会调用子类factoryMethod()
product = factoryMethod(type);
//完成产品的操作
product.begin();
product.add();
product.end();
}
//生产(实例化)具体产品类
public abstract Product factoryMethod(String type);
}
== 工厂方法实现类 ==
package com.jody.pattern.factory;
//继承了抽象工厂类的抽象工厂子类
public class ConcreteCreator extends Creator {
//在这个方法中实现工厂的功能
@Override
public Product factoryMethod(String type) {
Product product = null;
//实例化具体产品类
if("concrete".equals(type)){
//product 是父类(Creator)中的商品接口引用
product = new ConcreteProduct();
}else if("other".equals(type)){
//实例其它产品
product = new ConcreteProduct();
}
return product;
}
}
== 产品接口(抽象)类 ==
package com.jody.pattern.factory;
//具体产品接口(抽象)类
public abstract class Product {
public abstract void begin();
public abstract void add();
public abstract void end();
}
== 产品实现类 ==
package com.jody.pattern.factory;
//产品实现类
public class ConcreteProduct extends Product {
@Override
public void add() {
// 增加
}
@Override
public void begin() {
// 开始
}
@Override
public void end() {
// 结束
}
}
== 测试调用类 ==
package com.jody.pattern.factory;
//测试
public class Test {
public static void main(String[] args){
//实例化一个工厂,调用方法
//new实例化类是必须实现的,如果不实例化对象,就无法编程了,
//所以总是需要实例化类
//工厂方法也不例外,但是工厂方法模式,让我们把实例化类封装起来
//更方便类实例化的管理和维护
Creator c = new ConcreteCreator();
c.operation("concrete");
}
}
类是程序的基础,实例化类是编程中用得最多的地方,每一个对象都需要实例化后才能发挥作用,工厂方法模式让我们将类的实例化封装起来,更好的管理.这正是符合OO的思想.
- 大小: 41 KB
分享到:
相关推荐
因其才学得到李东阳赏识,被授予翰林院检讨的职位,参与编纂了《世宗实录》。胡缵宗的仕途起起伏伏,曾因刘瑾谋反案受到牵连,被贬为嘉定州判官,后升任瞳川州知州、安庆府知府等职。他在各地任职期间,都以其廉洁和...
《辞海》中对“隐士”的定义虽然只强调了隐居不仕,但真正的隐士更应具备一定的社会地位和影响力,如《南史·隐逸》中所述,他们应有才学,以天地为心,借自然之气,而非普通农夫或商贾所能比拟。 陶渊明的归隐之路...
java培训教程,我花了10000多才学的东西 java培训教程,我花了10000多才学的东西
《范进中举》是清代著名讽刺小说家吴敬梓的杰作,它收录于《儒林外史》这本著作之中,通过一系列生动的对比与夸张,折射出封建社会的种种丑态。《儒林外史》作为一部讽刺小说,以幽默诙谐的笔法揭示了封建社会士大夫...
崔庆才老师的“跟着崔庆才学爬虫2:requests库的使用”教程主要涵盖了Python爬虫中必不可少的requests库的使用方法。requests库是Python中最常用的HTTP客户端库,用于发送HTTP请求,非常适合进行网页抓取。在这个...
在企业财务管理领域,成本与费用的管理一直是核心问题之一。成本费用核算的准确性直接关系到企业财务信息的真实性和可靠性,也是影响企业经营决策和业绩评价的重要因素。本文将以东北财经才学会计系列教材中会计学10...
【收入与利润】是会计学中的核心概念,它们是衡量企业经营业绩的关键指标。本章主要探讨了收入的定义、特征、分类以及如何确认和计量收入,并深入讲解了利润的形成与分配。以下是对这些知识点的详细阐述: ...
在中国封建社会的长河中,女性往往被束缚于家庭与内室,然而在这一时期,却有一位女性在历史的舞台上留下了浓墨重彩的一笔,她就是北宋时期著名的女性政治家——章献明肃太后刘娥。她的故事不仅仅是个人奋斗史,更是...
- 隋朝开创了科举制度,这是中国古代选拔官员的一种方式,通过考试来选拔有才学的人进入仕途,打破了门阀士族对政权的垄断。 - 科举制与前朝的九品中正制相比,更加注重个人的学识和才能,而非出身和背景,它为...
今天,我们特别为苏教版小学语文二年级上册的学生们设计了一份精彩绝伦的课件——《梅兰芳学艺》,旨在通过这位京剧大师的生平故事,向孩子们传递坚持、勤奋和毅力等积极的人生态度和价值观。 梅兰芳的名字,对于...
然而,想要成为一名状元,需要经过层层考验,不仅仅是一个人的智慧与才学的较量,更是对个人意志与毅力的极大考验。 科举制度之所以能够维持严格的选拔标准,与皇帝对人才选拔的重视不无关系。在殿试这一考试环节,...
在现代社会,这仍然是一个不变的法则——机遇与个人能力并重,方能开启成功之门。 在陈廷敬的生涯中,学习和进取是贯穿始终的主旋律。无论面对怎样的逆境,他都能够通过不懈的学习和努力,转危为安,化险为夷。这...
在中华五千年浩瀚的历史长河中,成语故事如同一颗颗璀璨的明珠,不仅蕴含着深厚的文化底蕴,而且凝结了丰富的历史智慧。这些故事以其简洁精练的形式,生动地反映出先人们的处世哲学和生活智慧,而我们通过这些故事的...
流动负债是指企业在一年内或一个营业周期内需要偿还的债务,例如短期借款、应付账款、预收账款等。非流动负债则是偿还期限超过一年的债务,如长期借款、应付债券、长期应付款等。理解这些负债内容有助于我们全面把握...
1256年,文天祥参加科举考试,凭借其卓越的才学和敢于直言的勇气,以状元之姿进入了仕途。他在试卷中直陈时弊,提出整顿朝纲的建议,得到了宋理宗的赏识。然而,文天祥的正直与直言不讳,也为他带来了不少的磨难。他...
负债是一种企业对债权人的承诺,这种承诺通常在未来的某个时间点需要通过支付货币资金或提供相应服务来履行。例如,短期借款、应付账款、预收账款等都是企业常见的负债形式,它们代表了企业对外部的不同责任。 负债...
【唐太宗与贞观之治】是中国历史上一段极为重要的时期,它标志着唐朝初期的兴盛与稳定。唐太宗李世民,以其卓越的领导才能和深思熟虑的政策,开创了“贞观之治”,这是一段被后人广泛称颂的盛世。 在“贞观之治”中...
陆游通过这样的背景,巧妙地引出了梅花作为诗中的主角,同时也隐喻了他自己的处境——一个有才学的士人,在动荡的时代中,却往往被埋没。 在上片中,陆游继续写道“已是黄昏独自愁,更著风和雨”,这两句诗描绘了...
土楼主要分为圆形和方形两种,其中田螺坑土楼群是最具代表性的景点之一。 田螺坑土楼群由五座土楼构成,中心一座为方形的步云楼,周围环绕着三座圆形土楼(和昌楼、瑞云楼、振昌楼)以及一座椭圆形的文昌楼。这种...