T3_设计模式_工厂方法模式
- 格式:ppt
- 大小:899.00 KB
- 文档页数:14


设计模式期末试题及答案
一、选择题(每题2分,共10分)
1. 设计模式中的“工厂方法”模式属于以下哪种类型的模式?
A. 结构型模式
B. 创建型模式
C. 行为型模式
D. 并发型模式
答案:B
2. 在设计模式中,以下哪个模式允许一个对象在其内部状态改变时改变它的行为?
A. 单例模式
B. 观察者模式
C. 状态模式
D. 策略模式
答案:C
3. 以下哪个模式是用于处理对象间的一对多关系?
A. 代理模式
B. 装饰者模式
C. 组合模式
D. 桥接模式
答案:C
4. 装饰者模式和代理模式的主要区别是什么?
A. 装饰者模式增加了对象的功能,而代理模式不增加
B. 代理模式增加了对象的功能,而装饰者模式不增加
C. 装饰者模式和代理模式都增加了对象的功能
D. 装饰者模式和代理模式都不增加对象的功能
答案:A
5. 在设计模式中,以下哪个模式是用于解决类与类之间的耦合问题?
A. 单例模式
B. 适配器模式
C. 观察者模式
D. 工厂方法模式
答案:B
二、简答题(每题5分,共20分)
1. 请简述单例模式的工作原理。
答案:单例模式确保一个类只有一个实例,并提供一个全局访问点来访问该实例。它通常包含一个私有的静态实例变量和一个公有的静态方法,该方法用于获取实例。如果实例不存在,则创建它,如果已经存在,则返回它。
2. 请描述观察者模式的主要参与者及其职责。
答案:观察者模式包含两个主要参与者:观察者和被观察者。观察者负责接收更新,而当被观察者的状态发生变化时,它会通知所有注册的观察者。被观察者负责维护观察者列表,并在状态变化时通知他们。
3. 请解释策略模式如何实现算法的动态选择。
答案:策略模式允许在运行时选择算法或行为。它定义了一系列算法,并将每一个算法封装起来,使它们可以互换使用。策略模式使得算法可以独立于使用它们的客户端变化。
⼆⼗三种设计模式[3]-⽣成器模式(BuilderPattern)
前⾔
⽣成器,⼜名建造者模式,属于创建型模式。在《设计模式 - 可复⽤的⾯向对象软件》⼀书中对它的描述为“ 将⼀个复杂对象的构建与他
的表⽰分离,使得同样的构建过程可以创建不同的表⽰ ”。
与和不同的是,⼯⼚⽅法侧重于将类的实例化延迟到⼦类,由⼦类决定⼯⼚的创建,从⽽得到⼀个产品,抽象⼯⼚则是⼀个包含了多个
⼯⼚⽅法的⼤型⼯⼚,更侧重于⼀系列产品的创建,⽽⽣成器在创建产品同时,更加关注于产品的创建逻辑。由于它们的侧重点不同,⼯⼚
⽅法适合创建复杂的产品,⽣成器适合创建更加复杂的产品。
⼀个简单的例⼦。抽象⼯⼚代表了⼀个⽣产多种产品的代⼯⼚,⼯⼚⽅法代表了某个产品的⽣产车间,⽣成器则代表了某个产品的⽣产
线。
结构在⽣成器中,需要如下⼏种⾓⾊的⽀持:
IBuilder(⽣成器接⼝):⽤来定义创建⼀个产品实例所需要的各个函数;
ConcreteBuilder(⽣成器接⼝实现):实现创建产品实例所需要的各个函数;
Director(导向器):使⽤⽣成器来创建产品,封装了产品的实例化逻辑;
Product(产品):被导向器创建的产品对象;
实现
所谓“ 将⼀个复杂对象的构建与它的表⽰分离 ”是指由导向器去处理产品的实例化逻辑⽽不是⽣成器来处理。再由各个不同的⽣成器分别
实现创建产品实例所需要的各个函数,从⽽实现“ 同样的构建过程创建不同的表⽰ ”。
⽐如,在⼀个键⿏套装中包含了⼀个键盘和⼀个⿏标,不同的键⿏套装内⼜有不同品牌、型号的键盘和⿏标。可以通过不同的组合⽅式得
到⼀个完整的键⿏套装。
public interface IMouse
{
string GetBrand();
}
public class LogitechMouse : IMouse
{
public string GetBrand()
{
return "罗技-Logitech G903";
}
}
public class RazeMouse : IMouse
Java设计模式--策略模式,枚举+⼯⼚⽅法实现
如果项⽬中的⼀个页⾯跳转功能存在10个以上的if else判断,想要做⼀下整改
⼀、什么是策略模式
策略模式是对算法的包装,是把使⽤算法的责任和算法本⾝分割开来,委派给不同的对象管理,最终可以实现解决多重If判断问题。
1.环境(Context)⾓⾊:持有⼀个Strategy的引⽤。
2.抽象策略(Strategy)⾓⾊:这是⼀个抽象⾓⾊,通常由⼀个接⼝或抽象类实现。此⾓⾊给出所有的具体策略类所需的接⼝。
3.具体策略(ConcreteStrategy)⾓⾊:包装了相关的算法或⾏为。
(定义策略接⼝→实现不同的策略类→利⽤多态或其他⽅式调⽤策略。)
⼆、策略模式优缺点
优点:
算法可以⾃由切换(⾼层屏蔽算法,⾓⾊⾃由切换)
避免使⽤多重条件判断(如果算法过多就会出现很多相同的判断,很难维护)
扩展性好(可⾃由添加取消算法,⽽不影响整个功能)
缺点:
策略数量增多(每⼀个策略类复⽤性⼩,如果需要增加算法,就只能新增类)
所有的策略类都需要对外暴露(使⽤的⼈必须了解使⽤策略,这个就需要其他模式来补充,⽐如⼯⼚模式、代理模式)三、代码⽰例
1.定义共同的⽅法和⾏为
package com.ultiwill.strategy;
public interface PayStrategy {
/**
* 共同的⾏为⽅法
* @return
*/
String toPayHtml();
}
2. 三种具体策略的实现 (阿⾥⽀付, 微信⽀付, ⼩⽶⽀付)
package com.ultiwill.strategy.impl;
import com.ultiwill.strategy.PayStrategy;
/**
* @author chong.zuo
* @date 2020/9/24 15:21
*/
public class AliPayStrategy implements PayStrategy {
【设计模式-⼯⼚模式】男男⼥⼥的抽象⼯⼚模式
背景
虽然⼥娲已经成功将⼈类创造出来了,可是都是没有性别的,那么后续该如何繁衍呢。
为此,除了增加⼈种外,我们还需要增加所有⼈类都有的⼀个属性:性别。
由此:⼈种和性别相互组合⽣成6中不同的⼈类
男⿊⼈、⼥⿊⼈、男⽩⼈、⼥⽩⼈、男黄⼈、⼥黄⼈
原来的⼀个⼋卦炉也需要进⾏修改,变为专门⽣产男性的"男⼋卦炉" 和专门⽣产⼥性的 “⼥⼋卦炉”类图
可以看到我们在原有的⼏个⼈种上,⼜重新继承并实现了两个类,分别⽤于表⽰不同⼈种的男⼥
特别说明的是HumanFactory接⼝,在这个接⼝中定义了三个⽅法,分别⽤于⽣产不同的肤⾊的⼈种,也就是我们将肤⾊作为Y轴,性别作为X轴,通过X坐标和Y坐标唯⼀确定⼀个
⽣产出来的对象。
代码
⼈种接⼝
public interface Human {
//每个⼈种的⽪肤都是不同的颜⾊
public void getColor();
//每个⼈类都会发声
public void talk();
public void getSex();
}
⼈种接⼝即抽象产品,该产品的共同属性定义:肤⾊和语⾔,⽽性别则是不同产品下更深层的细分
实现⼈种接⼝的黄种⼈
public abstract class AbstractYellowHuman implements Human{
@Override
public void getColor() {
System.out.println("黄种⼈");
}
@Override
public void talk() {
System.out.println("国语");
}
}
继承了该接⼝的抽象黄种⼈类,每个抽象类都会实现产品的公共细节,⽽每个抽象类的都会有两个实现类,分别实现各⾃的不同的细节:性别
黄种⼈⼥性
public class YellowWoman extends AbstractYellowHuman{
@Override