第4章_单件模式+工厂系列模式
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2015-6-30
24
模式的结构的描述与使用
2.具体产品(ConcreteProduct)_2 : BluePenCore.java public class BluePenCore extends PenCore{ BluePenCore(){ color="蓝色"; } public void writeWord(String s){ System.out.println("写出"+color+"的字:"+s); } }
2015-6-30
28
模式的结构的描述与使用
4.具体构造者(ConcreteCreator): BlueBallPen.java public class BlueBallPen extends BallPen{ public PenCore getPenCore(){
return new BluePenCore();
集中了所有实例的创建逻辑,所以“高内聚”方面做的并 不好。另外,当系统中的具体产品类不断增多时,可能会 出现要求工厂类也要做相应的修改,扩展性并不很好。
工厂方法模式
工厂方法模式(别名:虚拟构造) 定义一个用于创建对象的接口,让子类决定实例化哪一个 类。Factory Method使一个类的实例化延迟到其子类。 Factory Method Pattern(Another Name: Virtual Constructor) Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses.
2015-6-30 21
模式的UML类图
2015-6-30
22
模式的结构的描述与使用
1.抽象产品(Product) : PenCore.java public abstract class PenCore{
String color;
public abstract void writeWord(String s); }
} public String show(){
String s="月亮的半径是"+radius+"km,距地球是"+distanceToEarth+"km";
return s; }
}
2015-6-30
11
模式的结构的描述与使用
2.应用 Application.java import javax.swing.*; import java.awt.*; public class Application{ public static void main(String args[]){ MyFrame f1=new MyFrame("张三看月亮"); MyFrame f2=new MyFrame( "李四看月亮"); f1.setBounds(10,10,360,150); f2.setBounds(370,10,360,150); f1.validate(); f2.validate(); } }
2015-6-30
}
10
模式的结构的描述与使用
1.单件பைடு நூலகம்(Singleton): Moon.java
… public static synchronized Moon getMoon(){
if(uniqueMoon==null){
uniqueMoon=new Moon(); }
return uniqueMoon;
}
2015-6-30
27
模式的结构的描述与使用
4.具体构造者(ConcreteCreator): RedBallPen.java public class RedBallPen extends BallPen{ public PenCore getPenCore(){ return new RedPenCore(); } }
2015-6-30
26
模式的结构的描述与使用
3.构造者(Creator):BallPen.java
public abstract class BallPen{ BallPen(){ System.out.println("生产了一只装有 "+getPenCore().color+"笔芯的圆珠 笔"); } public abstract PenCore getPenCore(); //工厂方法
模式设计 (JAVA)
商学院 信管专业教研室 韩 娜
电话: 661905 办公室: HG406
经典设计模式介绍
创建型模式
1.抽象工厂模式 2.工厂方法模式 3.单例模式 4.建造者模式 5.原型模式
结构型模式
行为型模式
1.适配器模式 2.外观模式 3.桥接模式 4.组合模式 5.装饰模式 6.享元模式 7.代理模式
1.迭代器模式 2.观察者模式 3.策略模式 4.命令模式 5.职责链模式 6.解释器模式 7.中介者模式 8.备忘录模式 9.状态模式 10.模板方法模式 11.访问者模式
关于交通工具
1. 2.
3.
只给司机一辆车(单例、多例) 任意定制交通工具的类型和生产过程 系列产品(车、武器、食品补给……)
2015-6-30
19
一 、 一个实例
假设有三个笔芯,分别是红笔芯、蓝笔芯和 黑笔芯。用户希望通过圆珠笔来明确笔芯的颜色。
2015-6-30
20
二、工厂方法模式的结构与使用
模式的结构中包括四种角色: •抽象产品(Product) •具体产品(ConcreteProduct) •构造者(Creator) •具体构造者(ConcreteCreator)
1.工厂(Creator)角色 简单工厂模式的核心,它负责实现创建所有实例的内部逻 辑。工厂类可以被外界直接调用,创建所需的产品对象。 2.抽象(Product)角色 简单工厂模式所创建的所有对象的父类,它负责描述所有 实例所共有的公共接口。
3.具体产品(Concrete Product)角色 简单工厂模式所创建的具体实例对象
}
2015-6-30
30
模式的结构的描述与使用 5.应用 Application.java
public class Application{ public static void main(String args[]){ PenCore penCore; BallPen ballPen=new BlueBallPen(); penCore=ballPen.getPenCore(); penCore.writeWord("你好,很高兴认识你"); ballPen=new RedBallPen(); penCore=ballPen.getPenCore(); penCore.writeWord("How are you"); ballPen=new BlackBallPen(); penCore=ballPen.getPenCore(); penCore.writeWord("nice to meet you"); } }
8
模式的UML类图
2015-6-30
9
模式的结构的描述与使用
1.单件类(Singleton): Moon.java
public class Moon{
private static Moon uniqueMoon; double radius;
double distanceToEarth;
private Moon(){ uniqueMoon=this; radius=1738; distanceToEarth=363300; }
2015-6-30
23
模式的结构的描述与使用
2.具体产品(ConcreteProduct)_1 : RedPenCore.java public class RedPenCore extends PenCore{ RedPenCore(){ color="红色"; } public void writeWord(String s){ System.out.println("写出"+color+"的字:"+s); } }
2015-6-30
18
一 、 概述
当系统准备为用户提供某个类的子类的实例, 又不想让用户代码和该子类形成耦合时,就可以 使用工厂方法模式来设计系统。工厂方法模式的 关键是在一个接口或抽象类中定义一个抽象方法, 该方法返回某个类的子类的实例,该抽象类或接 口让其子类或实现该接口的类通过重写这个抽象 方法返回某个子类的实例。
13
2015-6-30
三、单件模式的优点
•单件类的唯一实例由单件类本身来控制,所以
可以很好地控制用户何时访问它。
2015-6-30
14
一、什么是简单工厂模式
简单工厂模式属于类的创建型模式,又叫做 静态工厂方法模式。通过专门定义一个类 来负责创建其他类的实例,被创建的实例 通常都具有共同的父类。
二、模式中包含的角色及其职责
} }
2015-6-30
29
模式的结构的描述与使用
4.具体构造者(ConcreteCreator): BlackBallPen.java public class BlackBallPen extends BallPen{ public PenCore getPenCore(){ return new BlackPenCore(); }
2015-6-30
25
模式的结构的描述与使用
2.具体产品(ConcreteProduct)_3: BlackPenCore.java
public class BlackPenCore extends PenCore{ BlackPenCore(){ color="黑色"; } public void writeWord(String s){ System.out.println("写出"+color+"的字:"+s); } }
2015-6-30 12
模式的结构的描述与使用
2.应用 Application.java class MyFrame extends JFrame{ String str; MyFrame(String title){ setTitle(title); Moon moon=Moon.getMoon(); str=moon.show(); setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); setVisible(true); repaint(); } public void paint(Graphics g){ super.paint(g); g.setFont(new Font("宋体",Font.BOLD,14)); g.drawString(str,5,100); } }
Moveable
VihecleFactor y
Car
Plane
CarFactory
PlaneFactory
broom
BroomFactory
V
F
W
W2 1 V1 V2 F1 F2 W1
2
单件模式
单件模式 保证一个类仅有一个实例,并提供一个访问它 的全局访问点。 Prototype Pattern Ensure a class only has one instance, and provide a global point of access to it.
2015-6-30
6
一 、 概述
单件模式是关于怎样设计一个类,并使得 该类只有一个实例的成熟模式,该模式的关 键是将类的构造方法设置为private权限,并 提供一个返回它的唯一实例的类方法。
2015-6-30
7
二、单件模式的结构与使用
模式的结构中只包括一个角色:
•单件类(Singleton)
2015-6-30
三、简单工厂模式的优缺点
在这个模式中,工厂类是整个模式的关键所在。它包含必要的
判断逻辑,能够根据外界给定的信息,决定究竟应该创建 哪个具体类的对象。用户在使用时可以直接根据工厂类去 创建所需的实例,而无需了解这些对象是如何创建以及如 何组织的。有利于整个软件体系结构的优化。不难发现,
简单工厂模式的缺点也正体现在其工厂类上,由于工厂类
24
模式的结构的描述与使用
2.具体产品(ConcreteProduct)_2 : BluePenCore.java public class BluePenCore extends PenCore{ BluePenCore(){ color="蓝色"; } public void writeWord(String s){ System.out.println("写出"+color+"的字:"+s); } }
2015-6-30
28
模式的结构的描述与使用
4.具体构造者(ConcreteCreator): BlueBallPen.java public class BlueBallPen extends BallPen{ public PenCore getPenCore(){
return new BluePenCore();
集中了所有实例的创建逻辑,所以“高内聚”方面做的并 不好。另外,当系统中的具体产品类不断增多时,可能会 出现要求工厂类也要做相应的修改,扩展性并不很好。
工厂方法模式
工厂方法模式(别名:虚拟构造) 定义一个用于创建对象的接口,让子类决定实例化哪一个 类。Factory Method使一个类的实例化延迟到其子类。 Factory Method Pattern(Another Name: Virtual Constructor) Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses.
2015-6-30 21
模式的UML类图
2015-6-30
22
模式的结构的描述与使用
1.抽象产品(Product) : PenCore.java public abstract class PenCore{
String color;
public abstract void writeWord(String s); }
} public String show(){
String s="月亮的半径是"+radius+"km,距地球是"+distanceToEarth+"km";
return s; }
}
2015-6-30
11
模式的结构的描述与使用
2.应用 Application.java import javax.swing.*; import java.awt.*; public class Application{ public static void main(String args[]){ MyFrame f1=new MyFrame("张三看月亮"); MyFrame f2=new MyFrame( "李四看月亮"); f1.setBounds(10,10,360,150); f2.setBounds(370,10,360,150); f1.validate(); f2.validate(); } }
2015-6-30
}
10
模式的结构的描述与使用
1.单件பைடு நூலகம்(Singleton): Moon.java
… public static synchronized Moon getMoon(){
if(uniqueMoon==null){
uniqueMoon=new Moon(); }
return uniqueMoon;
}
2015-6-30
27
模式的结构的描述与使用
4.具体构造者(ConcreteCreator): RedBallPen.java public class RedBallPen extends BallPen{ public PenCore getPenCore(){ return new RedPenCore(); } }
2015-6-30
26
模式的结构的描述与使用
3.构造者(Creator):BallPen.java
public abstract class BallPen{ BallPen(){ System.out.println("生产了一只装有 "+getPenCore().color+"笔芯的圆珠 笔"); } public abstract PenCore getPenCore(); //工厂方法
模式设计 (JAVA)
商学院 信管专业教研室 韩 娜
电话: 661905 办公室: HG406
经典设计模式介绍
创建型模式
1.抽象工厂模式 2.工厂方法模式 3.单例模式 4.建造者模式 5.原型模式
结构型模式
行为型模式
1.适配器模式 2.外观模式 3.桥接模式 4.组合模式 5.装饰模式 6.享元模式 7.代理模式
1.迭代器模式 2.观察者模式 3.策略模式 4.命令模式 5.职责链模式 6.解释器模式 7.中介者模式 8.备忘录模式 9.状态模式 10.模板方法模式 11.访问者模式
关于交通工具
1. 2.
3.
只给司机一辆车(单例、多例) 任意定制交通工具的类型和生产过程 系列产品(车、武器、食品补给……)
2015-6-30
19
一 、 一个实例
假设有三个笔芯,分别是红笔芯、蓝笔芯和 黑笔芯。用户希望通过圆珠笔来明确笔芯的颜色。
2015-6-30
20
二、工厂方法模式的结构与使用
模式的结构中包括四种角色: •抽象产品(Product) •具体产品(ConcreteProduct) •构造者(Creator) •具体构造者(ConcreteCreator)
1.工厂(Creator)角色 简单工厂模式的核心,它负责实现创建所有实例的内部逻 辑。工厂类可以被外界直接调用,创建所需的产品对象。 2.抽象(Product)角色 简单工厂模式所创建的所有对象的父类,它负责描述所有 实例所共有的公共接口。
3.具体产品(Concrete Product)角色 简单工厂模式所创建的具体实例对象
}
2015-6-30
30
模式的结构的描述与使用 5.应用 Application.java
public class Application{ public static void main(String args[]){ PenCore penCore; BallPen ballPen=new BlueBallPen(); penCore=ballPen.getPenCore(); penCore.writeWord("你好,很高兴认识你"); ballPen=new RedBallPen(); penCore=ballPen.getPenCore(); penCore.writeWord("How are you"); ballPen=new BlackBallPen(); penCore=ballPen.getPenCore(); penCore.writeWord("nice to meet you"); } }
8
模式的UML类图
2015-6-30
9
模式的结构的描述与使用
1.单件类(Singleton): Moon.java
public class Moon{
private static Moon uniqueMoon; double radius;
double distanceToEarth;
private Moon(){ uniqueMoon=this; radius=1738; distanceToEarth=363300; }
2015-6-30
23
模式的结构的描述与使用
2.具体产品(ConcreteProduct)_1 : RedPenCore.java public class RedPenCore extends PenCore{ RedPenCore(){ color="红色"; } public void writeWord(String s){ System.out.println("写出"+color+"的字:"+s); } }
2015-6-30
18
一 、 概述
当系统准备为用户提供某个类的子类的实例, 又不想让用户代码和该子类形成耦合时,就可以 使用工厂方法模式来设计系统。工厂方法模式的 关键是在一个接口或抽象类中定义一个抽象方法, 该方法返回某个类的子类的实例,该抽象类或接 口让其子类或实现该接口的类通过重写这个抽象 方法返回某个子类的实例。
13
2015-6-30
三、单件模式的优点
•单件类的唯一实例由单件类本身来控制,所以
可以很好地控制用户何时访问它。
2015-6-30
14
一、什么是简单工厂模式
简单工厂模式属于类的创建型模式,又叫做 静态工厂方法模式。通过专门定义一个类 来负责创建其他类的实例,被创建的实例 通常都具有共同的父类。
二、模式中包含的角色及其职责
} }
2015-6-30
29
模式的结构的描述与使用
4.具体构造者(ConcreteCreator): BlackBallPen.java public class BlackBallPen extends BallPen{ public PenCore getPenCore(){ return new BlackPenCore(); }
2015-6-30
25
模式的结构的描述与使用
2.具体产品(ConcreteProduct)_3: BlackPenCore.java
public class BlackPenCore extends PenCore{ BlackPenCore(){ color="黑色"; } public void writeWord(String s){ System.out.println("写出"+color+"的字:"+s); } }
2015-6-30 12
模式的结构的描述与使用
2.应用 Application.java class MyFrame extends JFrame{ String str; MyFrame(String title){ setTitle(title); Moon moon=Moon.getMoon(); str=moon.show(); setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); setVisible(true); repaint(); } public void paint(Graphics g){ super.paint(g); g.setFont(new Font("宋体",Font.BOLD,14)); g.drawString(str,5,100); } }
Moveable
VihecleFactor y
Car
Plane
CarFactory
PlaneFactory
broom
BroomFactory
V
F
W
W2 1 V1 V2 F1 F2 W1
2
单件模式
单件模式 保证一个类仅有一个实例,并提供一个访问它 的全局访问点。 Prototype Pattern Ensure a class only has one instance, and provide a global point of access to it.
2015-6-30
6
一 、 概述
单件模式是关于怎样设计一个类,并使得 该类只有一个实例的成熟模式,该模式的关 键是将类的构造方法设置为private权限,并 提供一个返回它的唯一实例的类方法。
2015-6-30
7
二、单件模式的结构与使用
模式的结构中只包括一个角色:
•单件类(Singleton)
2015-6-30
三、简单工厂模式的优缺点
在这个模式中,工厂类是整个模式的关键所在。它包含必要的
判断逻辑,能够根据外界给定的信息,决定究竟应该创建 哪个具体类的对象。用户在使用时可以直接根据工厂类去 创建所需的实例,而无需了解这些对象是如何创建以及如 何组织的。有利于整个软件体系结构的优化。不难发现,
简单工厂模式的缺点也正体现在其工厂类上,由于工厂类