锈才学设计模式之 —— 工厂模式(一)
工厂方法模式:工厂模式能封装具体类型的实例化,工厂方法模式定义了一个创建对象的接口,但是由子类通过继承抽象方法来决定实例化那一个类,将类的实例化放在子类中.
说明:在实例化具体类时,都是采用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
分享到:
相关推荐
因其才学得到李东阳赏识,被授予翰林院检讨的职位,参与编纂了《世宗实录》。胡缵宗的仕途起起伏伏,曾因刘瑾谋反案受到牵连,被贬为嘉定州判官,后升任瞳川州知州、安庆府知府等职。他在各地任职期间,都以其廉洁和...
《辞海》中对“隐士”的定义虽然只强调了隐居不仕,但真正的隐士更应具备一定的社会地位和影响力,如《南史·隐逸》中所述,他们应有才学,以天地为心,借自然之气,而非普通农夫或商贾所能比拟。 陶渊明的归隐之路...
【标题】"huntbug课程设计"揭示了这个项目的核心是一个基于C++编程语言的游戏,名为"Huntbug"。在这个项目中,作者显然旨在运用刚刚掌握的C++基础知识,通过实践来深化理解并提升编程技能。 【描述】描述部分提到,...
java培训教程,我花了10000多才学的东西 java培训教程,我花了10000多才学的东西
《元故肖岩傅公圹记》是一篇重要的历史文献,揭示了元朝时期医官制度和军事征讨的历史细节。文章主要围绕傅居安,一位来自江西进贤县的世医家族成员,他在元世祖忽必烈征讨爪哇期间作为医工提领参与军事行动的故事...
崔庆才老师的“跟着崔庆才学爬虫2:requests库的使用”教程主要涵盖了Python爬虫中必不可少的requests库的使用方法。requests库是Python中最常用的HTTP客户端库,用于发送HTTP请求,非常适合进行网页抓取。在这个...
土楼主要分为圆形和方形两种,其中田螺坑土楼群是最具代表性的景点之一。 田螺坑土楼群由五座土楼构成,中心一座为方形的步云楼,周围环绕着三座圆形土楼(和昌楼、瑞云楼、振昌楼)以及一座椭圆形的文昌楼。这种...
【收入与利润】是会计学中的核心概念,它们是衡量企业经营业绩的关键指标。本章主要探讨了收入的定义、特征、分类以及如何确认和计量收入,并深入讲解了利润的形成与分配。以下是对这些知识点的详细阐述: ...
- 隋朝开创了科举制度,这是中国古代选拔官员的一种方式,通过考试来选拔有才学的人进入仕途,打破了门阀士族对政权的垄断。 - 科举制与前朝的九品中正制相比,更加注重个人的学识和才能,而非出身和背景,它为...
《范进中举》是清代文人吴敬梓创作的一篇讽刺小说,收录于《儒林外史》中。这篇小说通过对比与夸张的艺术手法,深刻揭示了封建社会的世态炎凉和人性的虚伪。以下是针对课文的详细解析: 对比一:四邻的态度转变 在...
- 夏商周时期的世官制基于血缘,后发展为军功爵制、察举制、九品中正制,最终到科举制,以才学为选拔标准。 - 监察制度从中央的御史大夫到地方的刺史、道、路等,不断扩大监察范围,如宋代谏官的监管对象扩大到...
第十章主要探讨的是会计中的核心概念——成本与费用。费用是企业在日常运营中产生的,会导致所有者权益减少的经济利益总流出,不涉及向所有者分配利润。费用分为多个要素,具有特定的特征:首先,它源于企业的日常...
在中华五千年浩瀚的历史长河中,成语故事如同一颗颗璀璨的明珠,不仅蕴含着深厚的文化底蕴,而且凝结了丰富的历史智慧。这些故事以其简洁精练的形式,生动地反映出先人们的处世哲学和生活智慧,而我们通过这些故事的...
流动负债是指企业在一年内或一个营业周期内需要偿还的债务,例如短期借款、应付账款、预收账款等。非流动负债则是偿还期限超过一年的债务,如长期借款、应付债券、长期应付款等。理解这些负债内容有助于我们全面把握...
负债是一种企业对债权人的承诺,这种承诺通常在未来的某个时间点需要通过支付货币资金或提供相应服务来履行。例如,短期借款、应付账款、预收账款等都是企业常见的负债形式,它们代表了企业对外部的不同责任。 负债...
【唐太宗与贞观之治】是中国历史上一段极为重要的时期,它标志着唐朝初期的兴盛与稳定。唐太宗李世民,以其卓越的领导才能和深思熟虑的政策,开创了“贞观之治”,这是一段被后人广泛称颂的盛世。 在“贞观之治”中...
种子短信基本页面 种子短信基本页面 种子短信基本页面
首先,领导是一种影响下属或团队达成特定目标的管理工作,涉及到品德、才学、业绩、资历和情感等多种影响力元素。领导的本质在于服务,即权力与威信的结合,应秉持“权为民所用、情为民所系、利为民所谋”的原则。 ...
同时,合理安排负债结构,既能满足经营需要,又能控制财务风险,是企业财务管理的核心任务之一。 非流动负债的核算相对复杂,涉及到长期借款、应付债券等,其特点是偿还期限长,通常伴随着利息资本化、分期偿还等...