设计模式课后习题

合集下载

《设计模式》刘伟 实验参考答案

《设计模式》刘伟 实验参考答案

《设计模式》刘伟 实验参考答案实验 11.在某图形库 API 中提供了多种矢量图模板,用户可以基于这些矢量图创建不同的显示图形,图形库设计人员设计的初始类图如下所示:在该图形库中,每个图形类(如 Circle 、Triangle 等)的 init()方法用于初始化所创建的图形, setColor()方法用于给图形设置边框颜色,fill()方法用于给图形设置填充颜色,setSize() 方法用于设置图形的大小,display()方法用于显示图形。

客户类(Client)在使用该图形库时发现存在如下问题:① 由于在创建窗口时每次只需要使用图形库中的一种图形,因此在更换图形时需要修改客户类源代码;② 在图形库中增加并使用新的图形时需要修改客户类源代码;③ 客户类在每次使用图形对象之前需要先创建图形对象,有些图形的创建过程较为复杂,导致客户类代码冗长且难以维护。

现需要根据面向对象设计原则对该系统进行重构,要求如下:① 隔离图形的创建和使用,将图形的创建过程封装在专门的类中,客户类在使用图形时无须直接创建图形对象,甚至不需要关心具体图形类类名;② 客户类能够方便地更换图形或使用新增图形,无须针对具体图形类编程,符合开闭原则。

绘制重构之后的类图并说明在重构过程中所运用的面向对象设计原则。

参考答案: Ci rcle + + + + +in it () setColor () f ill setSize () displa y () void void void void void Trian gle + + + + +in it () setColor () f ill setSize () displa y () void void void void void Rectangl e + + + + +in it () setColor () f ill setSize () displa y () void void void void void Cl ient2.使用简单工厂模式设计一个可以创建不同几何形状(Shape),如圆形(Circle)、矩形 (Rectangle)和三角形(Triangle)等的绘图工具类,每个几何图形均具有绘制draw()和擦除erase()两个方法,要求在绘制不支持的几何图形时,抛出一个 UnsupportedShapeException 异常,绘制类图并编程模拟实现。

《设计模式》刘伟 实验参考答案

《设计模式》刘伟 实验参考答案

《设计模式》刘伟 实验参考答案实验 11.在某图形库 API 中提供了多种矢量图模板,用户可以基于这些矢量图创建不同的显示图形,图形库设计人员设计的初始类图如下所示:在该图形库中,每个图形类(如 Circle 、Triangle 等)的 init()方法用于初始化所创建的图形, setColor()方法用于给图形设置边框颜色,fill()方法用于给图形设置填充颜色,setSize() 方法用于设置图形的大小,display()方法用于显示图形。

客户类(Client)在使用该图形库时发现存在如下问题:① 由于在创建窗口时每次只需要使用图形库中的一种图形,因此在更换图形时需要修改客户类源代码;② 在图形库中增加并使用新的图形时需要修改客户类源代码;③ 客户类在每次使用图形对象之前需要先创建图形对象,有些图形的创建过程较为复杂,导致客户类代码冗长且难以维护。

现需要根据面向对象设计原则对该系统进行重构,要求如下:① 隔离图形的创建和使用,将图形的创建过程封装在专门的类中,客户类在使用图形时无须直接创建图形对象,甚至不需要关心具体图形类类名;② 客户类能够方便地更换图形或使用新增图形,无须针对具体图形类编程,符合开闭原则。

绘制重构之后的类图并说明在重构过程中所运用的面向对象设计原则。

参考答案:Circle+ + + + +init () setColor () fill () setSize () display () : void void : void : void : void: Triangle+ + + + +init () setColor () fill () setSize () display () void: : void void : void : void: Rectangle + + + + +init () setColor () fill () setSize () display () void: void : : void : void : voidClient2.使用简单工厂模式设计一个可以创建不同几何形状(Shape),如圆形(Circle)、矩形 (Rectangle)和三角形(Triangle)等的绘图工具类,每个几何图形均具有绘制draw()和擦除erase()两个方法,要求在绘制不支持的几何图形时,抛出一个 UnsupportedShapeException 异常,绘制类图并编程模拟实现。

《设计模式》刘伟-实验参考答案

《设计模式》刘伟-实验参考答案

《设计模式》刘伟 实验参考答案实验 11.在某图形库 API 中提供了多种矢量图模板,用户可以基于这些矢量图创建不同的显示图形,图形库设计人员设计的初始类图如下所示:在该图形库中,每个图形类(如 Circle 、Triangle 等)的 init()方法用于初始化所创建的图形, setColor()方法用于给图形设置边框颜色,fill()方法用于给图形设置填充颜色,setSize() 方法用于设置图形的大小,display()方法用于显示图形。

客户类(Client)在使用该图形库时发现存在如下问题:① 由于在创建窗口时每次只需要使用图形库中的一种图形,因此在更换图形时需要修改客户类源代码;② 在图形库中增加并使用新的图形时需要修改客户类源代码;③ 客户类在每次使用图形对象之前需要先创建图形对象,有些图形的创建过程较为复杂,导致客户类代码冗长且难以维护。

现需要根据面向对象设计原则对该系统进行重构,要求如下:① 隔离图形的创建和使用,将图形的创建过程封装在专门的类中,客户类在使用图形时无须直接创建图形对象,甚至不需要关心具体图形类类名;② 客户类能够方便地更换图形或使用新增图形,无须针对具体图形类编程,符合开闭原则。

绘制重构之后的类图并说明在重构过程中所运用的面向对象设计原则。

参考答案:Circle + + + + +init () setColor () fill () setSize () display () : void void : void : void : void : Triangle + + + + +init () setColor () fill () setSize () display () void: : void void : void : void: Rectangle+ + + + +init () setColor () fill () setSize () display () void: void : : void : void : voidClient2.使用简单工厂模式设计一个可以创建不同几何形状(Shape),如圆形(Circle)、矩形(Rectangle)和三角形(Triangle)等的绘图工具类,每个几何图形均具有绘制draw()和擦除erase()两个方法,要求在绘制不支持的几何图形时,抛出一个 UnsupportedShapeException 异常,绘制类图并编程模拟实现。

中南大学刘伟《设计模式》实验参考答案

中南大学刘伟《设计模式》实验参考答案
参考答案:
3
SkinFactory
+ createButton () : Button + createTextField () : TextField + createComboBox () : ComboBox
Client
SpringSkinFactory
SummerSkinFactory
+ createButton () : Button + createTextField () : TextField + createComboBox () : ComboBox
+ fill ()
: void
+ setSize () : void
+ display () : void
2.使用简单工厂模式设计一个可以创建不同几何形状(Shape),如圆形(Circle)、矩形
(Rectangle)和三角形(Triangle)等的绘图工具类,每个几何图形均具有绘制 draw()和擦除 erase()
ShapeFactory + createShape (String type) : Shape
Circle
Rectangle
Triangle
+ draw () : void + erase () : void
+ draw () : void + erase () : void
+ draw () : void + erase () : void
两个方法,要求在绘制不支持的几何图形时,抛出一个 UnsupportedShapeException 异常,
绘制类图并编程模拟实现。

设计模式习题及参考答案

设计模式习题及参考答案

设计模式习题及参考答案《设计模式》复习题⼀、单选题1.不同级别的⽤户对同⼀对象拥有不同的访问权利或某个客户端不能直接操作到某个对象,但⼜必须和那个对象有所互动,这种情况最好使⽤什么设计模式( )A. Bridge模式B. Facade模式C. Adapter模式D. Proxy模式2.模式常⽤的基本设计模式可分为( )A.创建型、结构型和⾏为型B.对象型、结构型和⾏为型C.过程型、结构型和⾏为型D.抽象型、接⼝型和实现型3.以下哪个模式是利⽤⼀个对象,快速地⽣成⼀批对象( )A. 抽象⼯⼚(Abstract Factory)模式B. 合成(Composite)模式C. 原型(Prototype)模式D. 桥接(Bridge)模式4.以下不属于结构型模式是( )A. COMPOSITE(组合)B. ADAPTER(适配器)C. FLYWEIGHT(享元)D. SINGLETON(单例)5.以下意图那个是⽤来描述ABSTRACT FACTORY(抽象⼯⼚)模式( ) 。

A.提供⼀个创建⼀系列相关或相互依赖对象的接⼝,⽽⽆需指定它们具体的类。

B.定义⼀个⽤于创建对象的接⼝,让⼦类决定实例化哪⼀个类。

C.将⼀个类的接⼝转换成客户希望的另外⼀个接⼝。

D.表⽰⼀个作⽤于某对象结构中的各元素的操作。

6.设计模式的两⼤主题是( )A.系统的维护与开发 B 对象组合与类的继承C.系统架构与系统开发D.系统复⽤与系统扩展7.外观模式的作⽤是()A.当不能采⽤⽣成⼦类的⽅法进⾏扩充时,动态地给⼀个对象添加⼀些额外的功能。

B.为了系统中的⼀组功能调⽤提供⼀个⼀致的接⼝,这个接⼝使得这⼀⼦系统更加容易使⽤。

C.保证⼀个类仅有⼀个实例,并提供⼀个访问他的全局访问点。

D.在⽅法中定义算法的框架,⽽将算法中的⼀些操作步骤延迟到⼦类中实现某软件公司欲设计⼀款图像处理软件,帮助⽤户对拍摄的照⽚进⾏后期处理。

在软件需求分析阶段,公司的系统分析师识别出了如下3个关键需求:图像处理软件需要记录⽤户在处理照⽚时所有动作,并能够⽀持⽤户动作的撤销与重做等⾏为。

设计模式习题

设计模式习题

设计模式习题1、设计模式一般用来解决什么样的问题( a)A.同一问题的不同表相B不同问题的同一表相C.不同问题的不同表相D.以上都不是2、下列属于面向对象基本原则的是( c )A.继承B.封装C.里氏代换 D都不是3、Open-Close原则的含义是一个软件实体( a )A.应当对扩展开放,对修改关闭.B.应当对修改开放,对扩展关闭C.应当对继承开放,对修改关闭D.以上都不对4、当我们想创建一个具体的对象而又不希望指定具体的类时,可以使用( a )模式。

A.创建型B.结构型 C行为型 D.以上都可以5、要依赖于抽象,不要依赖于具体。

即针对接口编程,不要针对实现编程,是( d )的表述A.开-闭原则B.接口隔离原则C.里氏代换原则D.依赖倒转原则6、依据设计模式思想,程序开发中应优先使用的是( a )关系实现复用。

A,委派 B.继承C创建 D.以上都不对复用方式:继承和组合聚合(组合委派)7、设计模式的两大主题是( d )A.系统的维护与开发 B 对象组合与类的继承C.系统架构与系统开发D.系统复用与系统扩展8、单子模式中,两个基本要点( a b )和单子类自己提供单例A.构造函数私有B.唯一实例C.静态工厂方法D.以上都不对9、下列模式中,属于行为模式的是( b )A.工厂模式B观察者 C适配器以上都是10、“不要和陌生人说话” 是( d )原则的通俗表述A.接口隔离B.里氏代换C.依赖倒转D.迪米特:一个对象应对其他对象尽可能少的了解11、构造者的的退化模式是通过合并( c )角色完成退化的。

A.抽象产品B产品C创建者D使用者12、单子(单例,单态)模式类图结构如下:下列论述中,关于”0..1”表述的不正确的是( d )A.1表示,一个单例类中,最多可以有一个实例.B.”0..1”表示单例类中有不多于一个的实例C.0表示单例类中可以没有任何实例D.0表示单例类可以提供其他非自身的实例13、对象适配器模式是( a )原则的典型应用。

《设计模式》刘伟 实验参考答案

《设计模式》刘伟 实验参考答案

《设计模式》刘伟 实验参考答案实验 11.在某图形库 API 中提供了多种矢量图模板,用户可以基于这些矢量图创建不同的显示图形,图形库设计人员设计的初始类图如下所示:在该图形库中,每个图形类(如 Circle 、Triangle 等)的 init()方法用于初始化所创建的图形, setColor()方法用于给图形设置边框颜色,fill()方法用于给图形设置填充颜色,setSize() 方法用于设置图形的大小,display()方法用于显示图形。

客户类(Client)在使用该图形库时发现存在如下问题:① 由于在创建窗口时每次只需要使用图形库中的一种图形,因此在更换图形时需要修改客户类源代码;② 在图形库中增加并使用新的图形时需要修改客户类源代码;③ 客户类在每次使用图形对象之前需要先创建图形对象,有些图形的创建过程较为复杂,导致客户类代码冗长且难以维护。

现需要根据面向对象设计原则对该系统进行重构,要求如下:① 隔离图形的创建和使用,将图形的创建过程封装在专门的类中,客户类在使用图形时无须直接创建图形对象,甚至不需要关心具体图形类类名;② 客户类能够方便地更换图形或使用新增图形,无须针对具体图形类编程,符合开闭原则。

绘制重构之后的类图并说明在重构过程中所运用的面向对象设计原则。

参考答案:Circle+ + + + +init () setColor () fill () setSize () display () : void void : void : void : void: Triangle+ + + + +init () setColor () fill () setSize () display () void: : void void : void : void: Rectangle + + + + +init () setColor () fill () setSize () display () void: void : : void : void : voidClient2.使用简单工厂模式设计一个可以创建不同几何形状(Shape),如圆形(Circle)、矩形 (Rectangle)和三角形(Triangle)等的绘图工具类,每个几何图形均具有绘制draw()和擦除erase()两个方法,要求在绘制不支持的几何图形时,抛出一个 UnsupportedShapeException 异常,绘制类图并编程模拟实现。

设计模式习题及参考答案

设计模式习题及参考答案

《设计模式》复习题一、单选题1.不同级别的用户对同一对象拥有不同的访问权利或某个客户端不能直接操作到某个对象,但又必须和那个对象有所互动,这种情况最好使用什么设计模式( )A. Bridge模式B. Facade模式C. Adapter模式D. Proxy模式2.模式常用的基本设计模式可分为( )A.创建型、结构型和行为型B.对象型、结构型和行为型C.过程型、结构型和行为型D.抽象型、接口型和实现型3.以下哪个模式是利用一个对象,快速地生成一批对象( )A. 抽象工厂(Abstract Factory)模式B. 合成(Composite)模式C. 原型(Prototype)模式D. 桥接(Bridge)模式4.以下不属于结构型模式是( )A. COMPOSITE(组合)B. ADAPTER(适配器)C. FLYWEIGHT(享元)D. SINGLETON(单例)5.以下意图那个是用来描述ABSTRACT FACTORY(抽象工厂)模式( ) 。

A.提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

B.定义一个用于创建对象的接口,让子类决定实例化哪一个类。

C.将一个类的接口转换成客户希望的另外一个接口。

D.表示一个作用于某对象结构中的各元素的操作。

6.设计模式的两大主题是( )A.系统的维护与开发 B 对象组合与类的继承C.系统架构与系统开发D.系统复用与系统扩展7.外观模式的作用是()A.当不能采用生成子类的方法进行扩充时,动态地给一个对象添加一些额外的功能。

B.为了系统中的一组功能调用提供一个一致的接口,这个接口使得这一子系统更加容易使用。

C.保证一个类仅有一个实例,并提供一个访问他的全局访问点。

D.在方法中定义算法的框架,而将算法中的一些操作步骤延迟到子类中实现某软件公司欲设计一款图像处理软件,帮助用户对拍摄的照片进行后期处理。

在软件需求分析阶段,公司的系统分析师识别出了如下3个关键需求:图像处理软件需要记录用户在处理照片时所有动作,并能够支持用户动作的撤销与重做等行为。

Java 设计模式练习题及答案

Java 设计模式练习题及答案

Java 设计模式练习题及答案在学习Java设计模式时,练习题是非常重要的一部分。

通过练习题的实践,可以更好地理解和应用设计模式,提升自己的编程能力。

本文将介绍一些Java设计模式练习题,并提供相应的答案,希望能对读者在设计模式的学习和实践中有所帮助。

一、题目一:单例模式——懒汉式实现问题描述:请编写一个线程安全的懒汉式单例模式。

解答示例:```javapublic class Singleton {private static Singleton instance;private Singleton() {}public static synchronized Singleton getInstance() {if (instance == null) {instance = new Singleton();}return instance;}}```二、题目二:工厂模式——简单工厂实现问题描述:请使用简单工厂模式实现一个计算器,支持加减乘除四种运算。

解答示例:```javapublic class CalculatorFactory {public static Calculator createCalculator(String operator) {Calculator calculator = null;switch (operator) {case "+":calculator = new AddCalculator();break;case "-":calculator = new SubtractCalculator();break;case "*":calculator = new MultiplyCalculator();break;case "/":calculator = new DivideCalculator();break;}return calculator;}}public interface Calculator {double calculate(double num1, double num2);}public class AddCalculator implements Calculator {@Overridepublic double calculate(double num1, double num2) { return num1 + num2;}}public class SubtractCalculator implements Calculator { @Overridepublic double calculate(double num1, double num2) {return num1 - num2;}}// MultiplyCalculator和DivideCalculator类似,省略代码// 使用示例Calculator calculator = CalculatorFactory.createCalculator("+");double result = calculator.calculate(2, 3); // 结果为5```三、题目三:观察者模式问题描述:请设计一个简单的气象站系统,该系统需要实现以下功能:1. 可以添加观察者并实时更新气象数据;2. 当气象数据发生变化时,自动通知所有观察者进行更新。

设计模式课后习题

设计模式课后习题

建造者模式课后第一题:产品类:public class GamePerson {private String face;private String gender;private String cloth;public String getFace() {return face;}public void setFace(String face) {this.face = face;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public String getCloth() {return cloth;}public void setCloth(String cloth) {this.cloth = cloth;}}抽象建造类:public abstract class PersonCreate {protected GamePerson person=new GamePerson();public abstract void createFace();public abstract void createGender();public abstract void createCloth();public GamePerson getPerson(){return person;}}具体建造者类:public class PersonType1 extends PersonCreate { public void createFace() {person.setFace("瓜子脸");}public void createGender() {person.setGender("美女");}public void createCloth() {person.setCloth("洛丽塔");}}具体建造类:public class PersonType2 extends PersonCreate { public void createFace() {person.setFace("国字脸");}public void createGender() {person.setGender("帅哥");}public void createCloth() {person.setCloth("西装革履");}}指挥者类:public class GamePlayer {private PersonCreate pc;public void choseType(PersonCreate pc){this.pc=pc;}public GamePerson create(){pc.createCloth();pc.createFace();pc.createGender();return pc.getPerson();}}测试类:public class Test {public static void main(String[] args) {PersonCreate pc=new PersonType1();GamePlayer gp=new GamePlayer();gp.choseType(pc);GamePerson person=gp.create();System.out.println("游戏人物特征:");System.out.println("长着一张"+person.getFace()+"穿着"+person.getCloth()+"的"+person.getGender());}}课后第二题:产品类:public class Computer {private String cpu;private String storage;public String getCpu() {return cpu;}public void setCpu(String cpu) {this.cpu = cpu;}public String getStorage() {return storage;}public void setStorage(String storage) {this.storage = storage;}}抽象建造类:public abstract class Factory {protected Computer c=new Computer();public abstract void installCpu();public abstract void installStorage();public Computer getComputer(){return c;}}具体建造者类:public class Desktop extends Factory {public void installCpu() {c.setCpu("AMD");}public void installStorage() {c.setStorage("8G内存");}}具体建造类:public class Laptop extends Factory {public void installCpu() {c.setCpu("intel");}public void installStorage() {c.setStorage("1G内存");}}指挥者类:public class User {private Factory f;public void buy(Factory f){this.f=f;}public Computer con(){f.installCpu();f.installStorage();return f.getComputer();}}测试类:public class Test {public static void main(String[] args) {Factory f=new Laptop();User u=new User();u.buy(f);Computer c=u.con();System.out.println(c.getCpu()+" "+c.getStorage());}}单例模式课后第一题:懒汉式模式:public class SingletonWindow extends JInternalFrame { private static SingletonWindow instance=null;private SingletonWindow() {super("内部窗口",true,true,true);System.out.println("创建了一个内部窗体");}public static SingletonWindow getInstance(){if(instance==null){instance=new SingletonWindow();}else{System.out.println("已经创建了一个内部窗体!");}return instance;}}测试类:public class Main extends JFrame {private static final long serialVersionUID = 1L;private JButton btnAdd;private JPanel btnpl;private JDesktopPane dtp;private JInternalFrame itf;public Main() {this.setSize(new Dimension(600, 700)););this.setDefaultCloseOperation(EXIT_ON_CLOSEthis.setResizable(false);this.setVisible(true);;this.setLocationRelativeTo(this);this.setTitle("实验2");this.setLayout(null);this.dtp=new JDesktopPane();this.dtp.setBounds(new Rectangle(0, 0, 600, 600));this.btnpl=new JPanel();this.btnpl.setBounds(new Rectangle(0, 600, 600, 100));this.btnAdd=new JButton("添加一个内部窗体");this.btnAdd.setBounds(new Rectangle(10, 10, 150, 30));this.add(dtp);this.add(btnpl);this.btnpl.add(btnAdd);this.btnAdd.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent arg0) {itf=SingletonWindow.getInstance();itf.setSize(200, 200);itf.setVisible(true);dtp.add(itf);}});}public static void main(String[] args) {new Main();}}适配器模式课后第一题目标抽象类:public abstract class Robot {public abstract void run();public abstract void cry();}适配者类:public class Dog {public void run(){System.out.println("狗跑");}}public class Bird {public void cry(){System.out.println("鸟叫");}}适配器类:public class RobotAdapter extends Robot {private Bird bird;private Dog dog;public RobotAdapter(Bird bird,Dog dog) {this.bird=bird;this.dog=dog;}public void run() {System.out.print("机器人学");dog.run();}public void cry() {System.out.print("机器人学");bird.cry();}}测试类:public class Test {public static void main(String[] args) {Bird bird=new Bird();Dog dog=new Dog();RobotAdapter adapter=new RobotAdapter(bird, dog);adapter.run();adapter.cry();}}组合模式课后习题一public abstract class MyElement {public abstract void eat();public abstract void add(MyElement element);public abstract void remove(MyElement element);}public class Apple extends MyElement {public void eat() {System.out.println("吃苹果");}public void add(MyElement element) {}public void remove(MyElement element) {}}public class Banana extends MyElement {public void eat() {System.out.println("吃香蕉");}public void add(MyElement element) {}public void remove(MyElement element) {}}public class Pear extends MyElement {public void eat() {System.out.println("吃梨子");}public void add(MyElement element) {}public void remove(MyElement element) {}}public class Plate extends MyElement {private ArrayList list=new ArrayList();public void eat() {for (Object object : list) {((MyElement)object).eat();}}public void add(MyElement element) {list.add(element);}public void remove(MyElement element) { list.remove(element);}}测试类:public class Client {public static void main(String[] args) {MyElement obj1,obj2,obj3,obj4,obj5;Plate plate1,plate2,plate3;obj1=new Apple();obj2=new Pear();obj3=new Banana();plate1=new Plate();plate1.add(obj1);plate1.add(obj2);plate1.add(obj3);obj4=new Apple();obj5=new Banana();plate2=new Plate();plate3=new Plate();plate2.add(obj4);plate2.add(obj5);plate3.add(plate1);plate3.add(plate2);plate3.eat();}}课后习题二public abstract class AbstractFile {public abstract void add(Abstract );public abstract void delete(Abstract);public abstract void lookThrough();public abstract String get();}public class Image AbstractFile {private String ;public Image ) {this.;}public void add(Abstract) {}public void delete(Abstract) {}public void lookThrough() {}public String get() {return ;}}public class Text AbstractFile{private String ;public Text ) {this.;}public void add(Abstract) {}public void delete(Abstract) {}public void lookThrough() {}public String get() {return ;}}public class Vedio AbstractFile{private String ;public Vedio ) {this.;}public void add(Abstract) {}public void delete(Abstract) {}public void lookThrough() {}public String get() {return ;}}public class Folder extends AbstractFile{private ArrayList<AbstractFile> list=new ArrayList<AbstractFile>();private String ;public Folder(String ) {this.;}public void add(Abstract) {list.add(file);}public void delete(Abstract) {list.remove(file);}public void lookThrough() {System.out.println("正在浏览"+"文件夹,有以下文件");Iterator i=list.iterator();if(!(i.hasNext())){System.out.println("暂无任何文件");}for (Abstract : list) {System.out.println(abstract());}}public String get() {return ;}}测试类:public class Main {public static void main(String[] args) {// TODO Auto-generated method stubAbstract ImageFile("美女.jpg");Abstract VedioFile("xxx.avi");Abstract TextFile("凡人修仙传.txt");Abstract Folder("娱乐");folder.add(img1);folder.add(txt);folder.add(vedio);System.out.println("---------------------");folder.lookThrough();System.out.println("---------------------");folder.delete(txt);folder.delete(vedio);folder.delete(img1);System.out.println("---------------------");folder.lookThrough();}}装饰模式课后习题一抽象构建类:public interface Transform {public void move();}具体构建类:public class Car implements Transform {public Car() {System.out.println("变形金刚是一辆车");}public void move() {System.out.println("在陆地上移动");}}抽象装饰类:public class Changer implements Transform {private Transform transform;public Changer(Transform transform) {this.transform=transform;}public void move() {transform.move();}}具体装饰类:public class Doctor extends Robot {public Doctor(Transform transform) {super(transform);System.out.println("变成医生机器人");}public void cure(){System.out.println("我正在治疗");}}public class Robot extends Changer {public Robot(Transform transform) {super(transform);}public void say(){System.out.println("说话");}}public class Airplane extends Changer {public Airplane(Transform transform) {super(transform);System.out.println("变成飞机");}public void fly(){System.out.println("在空中飞翔");}}测试类:public class Test {public static void main(String[] args) {Transform transform;transform=new Car();Changer c=new Changer(transform);Robot r=new Robot(c);Doctor d=new Doctor(r);d.move();d.say();d.cure();}}课后习题二:抽象构建类:public interface AbstractBook {public void borrowBook();public void returnBook();}具体构建类:public class Book implements AbstractBook { public void borrowBook() {System.out.println("借书方法");}public void returnBook() {System.out.println("还书方法");}}抽象装饰类:public class AddFunction implements AbstractBook { private AbstractBook ab;public AddFunction(AbstractBook ab) {this.ab=ab;}public void borrowBook() {ab.borrowBook();}public void returnBook() {ab.returnBook();}}具体装饰类:public class AddFreeze extends AddFunction {public AddFreeze(AbstractBook ab) {super(ab);System.out.println("添加了冻结方法");}public void freeze(){System.out.println("冻结方法");}}public class AddLose extends AddFunction {public AddLose(AbstractBook ab) {super(ab);System.out.println("添加了遗失方法");}public void lose(){System.out.println("遗失方法");}}测试类:public class Test {public static void main(String[] args) {AbstractBook ab;ab=new Book();ab.borrowBook();ab.returnBook();System.out.println("--------");AddFreeze af=new AddFreeze(ab);af.borrowBook();af.returnBook();af.freeze();System.out.println("---------");AddLose al=new AddLose(ab);al.borrowBook();al.returnBook();al.lose();}}外观模式课后习题一:子系统类:public class {public void write(){System.out.println("文件正在保存。

设计模式题库以及答案

设计模式题库以及答案

一、选择题(20分,20个)二、简答题(30分,6个)1、框架的定义是框架就是一组相互协作的类,对于特定的一类软件,框架构成了一种可重用的设计。

2、架构是一个软件系统从整体到部分的最高层次的划分。

架构包括架构元件(Architecture Component)、联结器(Connector)、任务流(Task-flow)3、架构的目标:可靠性、安全性、可拓展性、可定制化、可维护性、客户体验、市场时机4、架构分成三种:逻辑架构、物理架构、系统架构5、架构的两要素:元件划分、设计决定6、设计模式是一系列在实践中总结出来的可复用的面向对象的软件设计方法7、划分三种不同层次的模式:架构模式(Architectural Pattern)、设计模式(Design Pattern)、成例(Idiom)。

成例有时称为代码模式(Coding Pattern)。

8、创建型设计模式,如工厂方法(Factory Method)模式、抽象工厂(Abstract Factory)模式、原型(Prototype)模式、单例(Singleton)模式,建造(Builder)模式9、结构型设计模式,如合成(Composite)模式、装饰(Decorator)模式、代理(Proxy)模式、享元(Flyweight)模式、门面(Facade)模式、桥梁(Bridge)模式10、架构模式描述软件系统里的基本的结构组织或纲要11、常见的架构模式:分层模式、黑板模式、中介模式、分散过程模式、微核模式12、框架与架构之间的关系:架构确定了系统整体结构、层次划分,不同部分之间的协作等设计考虑。

框架比架构更具体。

更偏重于技术涉嫌。

确定框架后,软件体系结构也随之确定,而对于同一软件体系结构(比如Web开发中的MVC),可以通过多种框架来实现13、框架与设计模式之间的关系:设计模式研究的是一个设计问题的解决方法,一个模式可应用于不同的框架和被不同的语言所实现;而框架则是一个应用的体系结构,是一种或多种设计模式和代码的混合体虽然它们有所不同,但却共同致力于使人们的设计可以被重用,在思想上存在着统一性的特点,因而设计模式的思想可以在框架设计中进行应用14、框架和设计模式存在着显著的区别:应用领域(前者单一解决方案可在不同框架上用)、内容(模式单纯设计、框架式设计与代码的混合体)15、设计模式比框架更容易移植16、类之间的关系:关联(自身关联、单向、双向实线箭头)、聚合(空心箭头)/组合<包容>(实心箭头)、依赖(虚线箭头)、泛华(继承,实线三角形)、实现(虚线三角形)17、基本元素符:类、包、接口18、开闭(OCP)原则:一个软件实体应当对扩展开放,对修改关闭。

《设计模式》刘伟实验参考答案

《设计模式》刘伟实验参考答案

《设计模式》刘伟实验参考答案《设计模式》刘伟实验参考答案实验 11.在某图形库 API 中提供了多种⽮量图模板,⽤户可以基于这些⽮量图创建不同的显⽰图形,图形库设计⼈员设计的初始类图如下所⽰:在该图形库中,每个图形类(如 Circle 、Triangle 等)的 init()⽅法⽤于初始化所创建的图形, setColor()⽅法⽤于给图形设置边框颜⾊,fill()⽅法⽤于给图形设置填充颜⾊,setSize() ⽅法⽤于设置图形的⼤⼩,display()⽅法⽤于显⽰图形。

客户类(Client)在使⽤该图形库时发现存在如下问题:①由于在创建窗⼝时每次只需要使⽤图形库中的⼀种图形,因此在更换图形时需要修改客户类源代码;②在图形库中增加并使⽤新的图形时需要修改客户类源代码;③客户类在每次使⽤图形对象之前需要先创建图形对象,有些图形的创建过程较为复杂,导致客户类代码冗长且难以维护。

现需要根据⾯向对象设计原则对该系统进⾏重构,要求如下:①隔离图形的创建和使⽤,将图形的创建过程封装在专门的类中,客户类在使⽤图形时⽆须直接创建图形对象,甚⾄不需要关⼼具体图形类类名;②客户类能够⽅便地更换图形或使⽤新增图形,⽆须针对具体图形类编程,符合开闭原则。

绘制重构之后的类图并说明在重构过程中所运⽤的⾯向对象设计原则。

参考答案:Circle+ + + + +init () setColor () fill () setSize () display () : void void : void : void : void: Triangle+ + + + +init () setColor () fill () setSize () display () void: : void void : void : void: Rectangle + + + + +init () setColor () fill () setSize () display () void: void : : void : void : voidClient2.使⽤简单⼯⼚模式设计⼀个可以创建不同⼏何形状(Shape),如圆形(Circle)、矩形 (Rectangle)和三⾓形(Triangle)等的绘图⼯具类,每个⼏何图形均具有绘制draw()和擦除erase()两个⽅法,要求在绘制不⽀持的⼏何图形时,抛出⼀个 UnsupportedShapeException 异常,绘制类图并编程模拟实现。

软件设计模式JAVA习题答案

软件设计模式JAVA习题答案

软件设计模式(J a v a版)习题第1章软件设计模式基础软件设计模式概述UML中的类图面向对象的设计原则一、名词解释1.一个软件实体应当对扩展开放,对修改关闭,即在不修改源代码的基础上扩展一个系统的行为。

2.一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。

3.在软件中如果能够使用基类对象,那么一定能够使用其子类对象。

4.是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。

二、单选择题1.( A )2.( A )3. ( A )4. ( D )5.( D )6.( A ) 7. ( D ) 8.( D ) 9.( D ) 10.( E )11.( C ) 12.( C ) 13. ( A )三、多选择题1.( A、B、C、D ) 2. ( A、B ) 3.( A、D ) 4.( A、B、C、D ) 四、填空题1.依赖倒转、迪米特法则、单一职责2.模式名字、目的、问题、解决方案、效果、实例代码3.超类、子类4.开闭5.用户6.依赖倒转7.组合/聚合8.结构型、行为型9.依赖倒转10.开闭11.需求收集是否正确、体系结构的构建是否合理、测试是否完全12.人与人之间的交流13.接口14.名称、目的、解决方案15.对象组合、类继承16.对象组合17.对象组合、类继承18.抽象类的指针五、简答题1.答:设计模式按类型分为以下三类:1)创建型设计模式:以灵活的方式创建对象集合,用于管理对象的创建。

2)结构型设计模式:将己有的代码集成到新的面向对象设计中,用于处理类或对象的组合。

3)行为型设计模式:用于描述对类或对象怎样交互和怎样分配职责。

2.答:设计模式的主要优点如下:1)设计模式融合了众多专家的经验,并以一种标准的形式供广大开发人员所用,它提供了一套通用的设计词汇和一种通用的语言以方便开发人员之间沟通和交流,使得设计方案更加通俗易懂。

设计模式 中介者模式 课后作业

设计模式 中介者模式 课后作业

《设计模式:中介者模式的运用与课后作业总结》一、前言在软件开发中,设计模式是一种被广泛接受的解决问题的方法或原则。

其中,中介者模式作为一种行为型设计模式,在协调复杂对象间的交互方面有着独特的优势。

本文将重点探讨中介者模式的运用,并结合课后作业总结,旨在帮助读者更好地理解和应用这一设计模式。

二、中介者模式的原理和应用1. 中介者模式的基本概念中介者模式是指通过一个中介对象来封装一系列对象的交互,使其不再直接相互作用。

这种方式可以减少对象间的耦合性,从而使系统变得更加灵活和可维护。

在实际应用中,中介者模式可以被用来处理复杂的交互场景,例如多个对象间的协作、通信和同步等。

2. 中介者模式的实际运用在软件开发中,中介者模式可以被广泛应用于各种场景,如图形界面开发、进程管理、通信系统等。

以图形界面开发为例,当多个组件之间需要进行复杂的交互时,可以引入一个中介者对象来管理它们之间的通信,从而简化系统的设计和维护流程。

三、课后作业总结在课后作业中,我们学习了中介者模式的基本原理和实际运用,同时也深入了解了其在软件开发中的重要性。

通过自主练习和案例分析,我们加深了对中介者模式的理解,并通过实际操作提升了自己的实践能力。

四、对中介者模式的个人观点和理解作为文章写手,我个人认为中介者模式在软件开发中具有重要的地位和应用价值。

通过引入中介者对象,我们可以更好地组织和管理各个对象间的交互,从而提高系统的可扩展性和可维护性。

中介者模式也可以让我们更好地把握系统的整体架构和设计思路,为复杂系统的开发和维护提供有力的支持。

五、总结中介者模式作为一种重要的设计模式,在软件开发中有着广泛的应用前景。

通过课后作业的总结和实践,我们可以更深入地理解和应用中介者模式,从而提升自己的软件开发能力。

希望通过本文的共享,读者可以对中介者模式有更深入的了解,并在实际项目中灵活运用。

六、中介者模式的实际案例分析为了更好地理解中介者模式,我们可以通过一个实际的案例来深入探讨其应用场景和效果。

设计模式题库(修改后)上课讲义

设计模式题库(修改后)上课讲义

设计模式题库(修改后)1.设计模式的原理? (C)C. 面向接口编程2. 以下对"开-闭"原则的一些描述错误的是?(A)A. "开-闭"原则与"对可变性的封装原则"没有相似性.3.以下属于创建型模式是? (A)B.BUILDER(生成器)C. PROTOTYPE(原型)D.SINGLETON(单件)4.以下属于结构型模式是? (D)COMPOSITE(组合) B. ADAPTER(适配器)B.FLYWEIGHT(享元)5.以下属于行为型模式是? (D )6. COMMAND(命令)7. STRATEGY(策略)8. MEMENTO(备忘录)/*23模式意图*/6.以下意图那个是用来描述ABSTRACT FACTORY(抽象工厂)?(A)A.提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

7.以下意图那个是用来描述BUILDER(生成器)?(B)将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

8.以下意图那个是用来描述FACTORY METHOD(工厂方法)?(C)C.定义一个用于创建对象的接口,让子类决定实例化哪一个类。

该模式使一个类的实例化延迟到其子类。

9.以下意图那个是用来描述PROTOTYPE(原型)?(D)D.用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

10.以下意图那个是用来描述SINGLETON(单件)?(B)B.保证一个类仅有一个实例,并提供一个访问它的全局访问点。

11.以下意图那个是用来描述ADAPTER(适配器)?(A)A.将一个类的接口转换成客户希望的另外一个接口。

本模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

12.以下意图那个是用来描述BRIDGE(桥接)?(B)B.将抽象部分与它的实现部分分离,使它们都可以独立地变化。

13.以下意图那个是用来描述COMPOSITE(组合)?(C)C.将对象组合成树形结构以表示“部分-整体”的层次结构。

《设计模式》刘伟实验参考答案

《设计模式》刘伟实验参考答案

《设计模式》伟 实验参考答案实验 11.在某图形库 API 中提供了多种矢量图模板,用户可以基于这些矢量图创建不同的显示图形,图形库设计人员设计的初始类图如下所示:在该图形库中,每个图形类(如 Circle 、Triangle 等)的 init()方法用于初始化所创建的图形, setColor()方法用于给图形设置边框颜色,fill()方法用于给图形设置填充颜色,setSize() 方法用于设置图形的大小,display()方法用于显示图形。

客户类(Client)在使用该图形库时发现存在如下问题:① 由于在创建窗口时每次只需要使用图形库中的一种图形,因此在更换图形时需要修改客户类源代码;② 在图形库中增加并使用新的图形时需要修改客户类源代码;③ 客户类在每次使用图形对象之前需要先创建图形对象,有些图形的创建过程较为复杂,导致客户类代码冗长且难以维护。

现需要根据面向对象设计原则对该系统进行重构,要求如下:① 隔离图形的创建和使用,将图形的创建过程封装在专门的类中,客户类在使用图形时无须直接创建图形对象,甚至不需要关心具体图形类类名;② 客户类能够方便地更换图形或使用新增图形,无须针对具体图形类编程,符合开闭原则。

绘制重构之后的类图并说明在重构过程中所运用的面向对象设计原则。

参考答案:Circle+ + + + +init () setColor () fill () setSize () display () : void void : void : void : void: Triangle+ + + + +init () setColor () fill () setSize () display () void: : void void : void : void: Rectangle + + + + +init () setColor () fill () setSize () display () void: void : : void : void : voidClient2.使用简单工厂模式设计一个可以创建不同几何形状(Shape),如圆形(Circle)、矩形 (Rectangle)和三角形(Triangle)等的绘图工具类,每个几何图形均具有绘制draw()和擦除erase()两个方法,要求在绘制不支持的几何图形时,抛出一个 UnsupportedShapeException 异常,绘制类图并编程模拟实现。

《设计模式》刘伟 实验参考答案

《设计模式》刘伟 实验参考答案

《设计模式》刘伟 实验参考答案实验 11.在某图形库 API 中提供了多种矢量图模板,用户可以基于这些矢量图创建不同的显示图形,图形库设计人员设计的初始类图如下所示:在该图形库中,每个图形类(如 Circle 、Triangle 等)的 init()方法用于初始化所创建的图形, setColor()方法用于给图形设置边框颜色,fill()方法用于给图形设置填充颜色,setSize() 方法用于设置图形的大小,display()方法用于显示图形。

客户类(Client)在使用该图形库时发现存在如下问题:① 由于在创建窗口时每次只需要使用图形库中的一种图形,因此在更换图形时需要修改客户类源代码;② 在图形库中增加并使用新的图形时需要修改客户类源代码;③ 客户类在每次使用图形对象之前需要先创建图形对象,有些图形的创建过程较为复杂,导致客户类代码冗长且难以维护。

现需要根据面向对象设计原则对该系统进行重构,要求如下:① 隔离图形的创建和使用,将图形的创建过程封装在专门的类中,客户类在使用图形时无须直接创建图形对象,甚至不需要关心具体图形类类名;② 客户类能够方便地更换图形或使用新增图形,无须针对具体图形类编程,符合开闭原则。

绘制重构之后的类图并说明在重构过程中所运用的面向对象设计原则。

参考答案:Circle+ + + + +init () setColor () fill () setSize () display () : voidvoid : void : void : void: Triangle + + + + +init () setColor () fill () setSize () display () void : : void void : void : void: Rectangle + + + + +init () setColor () fill () setSize () display () void: void : : void : void : voidClient2.使用简单工厂模式设计一个可以创建不同几何形状(Shape),如圆形(Circle)、矩形 (Rectangle)和三角形(Triangle)等的绘图工具类,每个几何图形均具有绘制draw()和擦除erase()两个方法,要求在绘制不支持的几何图形时,抛出一个 UnsupportedShapeException 异常,绘制类图并编程模拟实现。

《设计模式》刘伟 实验参考答案

《设计模式》刘伟 实验参考答案

《设计模式》刘伟 实验参考答案实验 11.在某图形库 API 中提供了多种矢量图模板,用户可以基于这些矢量图创建不同的显示图形,图形库设计人员设计的初始类图如下所示:在该图形库中,每个图形类(如 Circle 、Triangle 等)的 init()方法用于初始化所创建的图形, setColor()方法用于给图形设置边框颜色,fill()方法用于给图形设置填充颜色,setSize() 方法用于设置图形的大小,display()方法用于显示图形。

客户类(Client)在使用该图形库时发现存在如下问题:① 由于在创建窗口时每次只需要使用图形库中的一种图形,因此在更换图形时需要修改客户类源代码;② 在图形库中增加并使用新的图形时需要修改客户类源代码;③ 客户类在每次使用图形对象之前需要先创建图形对象,有些图形的创建过程较为复杂,导致客户类代码冗长且难以维护。

现需要根据面向对象设计原则对该系统进行重构,要求如下:① 隔离图形的创建和使用,将图形的创建过程封装在专门的类中,客户类在使用图形时无须直接创建图形对象,甚至不需要关心具体图形类类名;② 客户类能够方便地更换图形或使用新增图形,无须针对具体图形类编程,符合开闭原则。

绘制重构之后的类图并说明在重构过程中所运用的面向对象设计原则。

参考答案:Circle+ + + + +init () setColor () fill () setSize () display () : void void : void : void : void: Triangle+ + + + +init () setColor () fill () setSize () display () void: : void void : void : void: Rectangle + + + + +init () setColor () fill () setSize () display () void: void : : void : void : voidClient2.使用简单工厂模式设计一个可以创建不同几何形状(Shape),如圆形(Circle)、矩形 (Rectangle)和三角形(Triangle)等的绘图工具类,每个几何图形均具有绘制draw()和擦除erase()两个方法,要求在绘制不支持的几何图形时,抛出一个 UnsupportedShapeException 异常,绘制类图并编程模拟实现。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

建造者模式课后第一题:产品类:public class GamePerson {private String face;private String gender;private String cloth;public String getFace() {return face;}public void setFace(String face) {this.face = face;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public String getCloth() {return cloth;}public void setCloth(String cloth) {this.cloth = cloth;}}抽象建造类:public abstract class PersonCreate {protected GamePerson person=new GamePerson();public abstract void createFace();public abstract void createGender();public abstract void createCloth();public GamePerson getPerson(){return person;}}具体建造者类:public class PersonType1 extends PersonCreate { public void createFace() {person.setFace("瓜子脸");}public void createGender() {person.setGender("美女");}public void createCloth() {person.setCloth("洛丽塔");}}具体建造类:public class PersonType2 extends PersonCreate { public void createFace() {person.setFace("国字脸");}public void createGender() {person.setGender("帅哥");}public void createCloth() {person.setCloth("西装革履");}}指挥者类:public class GamePlayer {private PersonCreate pc;public void choseType(PersonCreate pc){ this.pc=pc;}public GamePerson create(){pc.createCloth();pc.createFace();pc.createGender();return pc.getPerson();}}测试类:public class Test {public static void main(String[] args) { PersonCreate pc=new PersonType1();GamePlayer gp=new GamePlayer();gp.choseType(pc);GamePerson person=gp.create();System.out.println("游戏人物特征:");System.out.println("长着一张"+person.getFace()+"穿着"+person.getCloth()+"的"+person.getGender());}}课后第二题:产品类:public class Computer {private String cpu;private String storage;public String getCpu() {return cpu;}public void setCpu(String cpu) {this.cpu = cpu;}public String getStorage() {return storage;}public void setStorage(String storage) {this.storage = storage;}}抽象建造类:public abstract class Factory {protected Computer c=new Computer();public abstract void installCpu();public abstract void installStorage();public Computer getComputer(){return c;}}具体建造者类:public class Desktop extends Factory {public void installCpu() {c.setCpu("AMD");}public void installStorage() {c.setStorage("8G内存");}}具体建造类:public class Laptop extends Factory {public void installCpu() {c.setCpu("intel");}public void installStorage() {c.setStorage("1G内存");}}指挥者类:public class User {private Factory f;public void buy(Factory f){this.f=f;}public Computer con(){f.installCpu();f.installStorage();return f.getComputer();}}测试类:public class Test {public static void main(String[] args) {Factory f=new Laptop();User u=new User();u.buy(f);Computer c=u.con();System.out.println(c.getCpu()+" "+c.getStorage());}}单例模式课后第一题:懒汉式模式:public class SingletonWindow extends JInternalFrame { private static SingletonWindow instance=null;private SingletonWindow() {super("内部窗口",true,true,true);System.out.println("创建了一个内部窗体");}public static SingletonWindow getInstance(){if(instance==null){instance=new SingletonWindow();}else{System.out.println("已经创建了一个内部窗体!");}return instance;}}测试类:public class Main extends JFrame {private static final long serialVersionUID = 1L;private JButton btnAdd;private JPanel btnpl;private JDesktopPane dtp;private JInternalFrame itf;public Main() {this.setSize(new Dimension(600, 700));this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setResizable(false);this.setVisible(true);;this.setLocationRelativeTo(this);this.setTitle("实验2");this.setLayout(null);this.dtp=new JDesktopPane();this.dtp.setBounds(new Rectangle(0, 0, 600, 600));this.btnpl=new JPanel();this.btnpl.setBounds(new Rectangle(0, 600, 600, 100));this.btnAdd=new JButton("添加一个内部窗体");this.btnAdd.setBounds(new Rectangle(10, 10, 150, 30));this.add(dtp);this.add(btnpl);this.btnpl.add(btnAdd);this.btnAdd.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent arg0) {itf=SingletonWindow.getInstance();itf.setSize(200, 200);itf.setVisible(true);dtp.add(itf);}});}public static void main(String[] args) {new Main();}}适配器模式课后第一题目标抽象类:public abstract class Robot {public abstract void run();public abstract void cry();}适配者类:public class Dog {public void run(){System.out.println("狗跑");}}public class Bird {public void cry(){System.out.println("鸟叫");}}适配器类:public class RobotAdapter extends Robot {private Bird bird;private Dog dog;public RobotAdapter(Bird bird,Dog dog) {this.bird=bird;this.dog=dog;}public void run() {System.out.print("机器人学");dog.run();}public void cry() {System.out.print("机器人学");bird.cry();}}测试类:public class Test {public static void main(String[] args) {Bird bird=new Bird();Dog dog=new Dog();RobotAdapter adapter=new RobotAdapter(bird, dog);adapter.run();adapter.cry();}}组合模式课后习题一public abstract class MyElement {public abstract void eat();public abstract void add(MyElement element);public abstract void remove(MyElement element);}public class Apple extends MyElement {public void eat() {System.out.println("吃苹果");}public void add(MyElement element) {}public void remove(MyElement element) {}}public class Banana extends MyElement {public void eat() {System.out.println("吃香蕉");}public void add(MyElement element) {}public void remove(MyElement element) {}}public class Pear extends MyElement { public void eat() {System.out.println("吃梨子");}public void add(MyElement element) {}public void remove(MyElement element) {}}public class Plate extends MyElement { private ArrayList list=new ArrayList();public void eat() {for (Object object : list) {((MyElement)object).eat();}}public void add(MyElement element) {list.add(element);}public void remove(MyElement element) { list.remove(element);}}测试类:public class Client {public static void main(String[] args) { MyElement obj1,obj2,obj3,obj4,obj5;Plate plate1,plate2,plate3;obj1=new Apple();obj2=new Pear();obj3=new Banana();plate1=new Plate();plate1.add(obj1);plate1.add(obj2);plate1.add(obj3);obj4=new Apple();obj5=new Banana();plate2=new Plate();plate3=new Plate();plate2.add(obj4);plate2.add(obj5);plate3.add(plate1);plate3.add(plate2);plate3.eat();}}课后习题二public abstract class AbstractFile {public abstract void add(AbstractFile file );public abstract void delete(AbstractFile file);public abstract void lookThrough();public abstract String getfileName();}public class ImageFile extends AbstractFile { private String fileName;public ImageFile(String fileName) {this.fileName=fileName;}public void add(AbstractFile file) {}public void delete(AbstractFile file) {}public void lookThrough() {}public String getfileName() {return fileName;}}public class TextFile extends AbstractFile{private String fileName;public TextFile(String fileName) {this.fileName=fileName;}public void add(AbstractFile file) {}public void delete(AbstractFile file) {}public void lookThrough() {}public String getfileName() {return fileName;}}public class VedioFile extends AbstractFile{private String fileName;public VedioFile(String fileName) {this.fileName=fileName;}public void add(AbstractFile file) {}public void delete(AbstractFile file) {}public void lookThrough() {}public String getfileName() {return fileName;}}public class Folder extends AbstractFile{private ArrayList<AbstractFile> list=new ArrayList<AbstractFile>();private String fileName;public Folder(String fileName) {this.fileName=fileName;}public void add(AbstractFile file) {list.add(file);}public void delete(AbstractFile file) {list.remove(file);}public void lookThrough() {System.out.println("正在浏览"+fileName+"文件夹,有以下文件");Iterator i=list.iterator();if(!(i.hasNext())){System.out.println("暂无任何文件");}for (AbstractFile abstractFile : list) {System.out.println(abstractFile.getfileName());}}public String getfileName() {return fileName;}}测试类:public class Main {public static void main(String[] args) {// TODO Auto-generated method stubAbstractFile img1=new ImageFile("美女.jpg");AbstractFile vedio=new VedioFile("xxx.avi");AbstractFile txt=new TextFile("凡人修仙传.txt");AbstractFile folder=new Folder("娱乐");folder.add(img1);folder.add(txt);folder.add(vedio);System.out.println("---------------------");folder.lookThrough();System.out.println("---------------------");folder.delete(txt);folder.delete(vedio);folder.delete(img1);System.out.println("---------------------");folder.lookThrough();}}装饰模式课后习题一抽象构建类:public interface Transform {public void move();}具体构建类:public class Car implements Transform {public Car() {System.out.println("变形金刚是一辆车");}public void move() {System.out.println("在陆地上移动");}}抽象装饰类:public class Changer implements Transform { private Transform transform;public Changer(Transform transform) {this.transform=transform;}public void move() {transform.move();}}具体装饰类:public class Doctor extends Robot {public Doctor(Transform transform) {super(transform);System.out.println("变成医生机器人");}public void cure(){System.out.println("我正在治疗");}}public class Robot extends Changer {public Robot(Transform transform) {super(transform);}public void say(){System.out.println("说话");}}public class Airplane extends Changer {public Airplane(Transform transform) {super(transform);System.out.println("变成飞机");}public void fly(){System.out.println("在空中飞翔");}}测试类:public class Test {public static void main(String[] args) {Transform transform;transform=new Car();Changer c=new Changer(transform);Robot r=new Robot(c);Doctor d=new Doctor(r);d.move();d.say();d.cure();}}课后习题二:抽象构建类:public interface AbstractBook {public void borrowBook();public void returnBook();}具体构建类:public class Book implements AbstractBook { public void borrowBook() {System.out.println("借书方法");}public void returnBook() {System.out.println("还书方法");}}抽象装饰类:public class AddFunction implements AbstractBook { private AbstractBook ab;public AddFunction(AbstractBook ab) {this.ab=ab;}public void borrowBook() {ab.borrowBook();}public void returnBook() {ab.returnBook();}}具体装饰类:public class AddFreeze extends AddFunction { public AddFreeze(AbstractBook ab) {super(ab);System.out.println("添加了冻结方法");}public void freeze(){System.out.println("冻结方法");}}public class AddLose extends AddFunction { public AddLose(AbstractBook ab) {super(ab);System.out.println("添加了遗失方法");}public void lose(){System.out.println("遗失方法");}}测试类:public class Test {public static void main(String[] args) { AbstractBook ab;ab=new Book();ab.borrowBook();ab.returnBook();System.out.println("--------");AddFreeze af=new AddFreeze(ab);af.borrowBook();af.returnBook();af.freeze();System.out.println("---------");AddLose al=new AddLose(ab);al.borrowBook();al.returnBook();al.lose();}}外观模式课后习题一:子系统类:public class FileWrite {public void write(){System.out.println("文件正在保存。

相关文档
最新文档