设计模式课后习题
《设计模式》刘伟 实验参考答案

《设计模式》刘伟 实验参考答案实验 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 异常,绘制类图并编程模拟实现。
uml课后习题答案

uml课后习题答案第一章系统建模与分析设计的演变课后习题:1、A2、C3、D4、B5、软件按照其工作方式可划分为实时处理软件、分时处理软件、交互式软件和批处理软件。
6、软件生存周期由软件的定义、软件的开发和软件的使用维护和更新换代三部分组成。
7、软件开发模型有瀑布模型、增量模型、螺旋模型、智能模型和快速原型模型等五种主要模型8、面向对象技术采用以类为中心的封装、继承、多态等不仅支持软件复用,而且使软件维护工作可靠有效,可实现软件系统的柔性制造。
9、UML的优点是:唯一性、连续性、维护性、复用性和完善性。
第二章统一建模语言UML1、A2、B3、C4、D5、B6、UML分析和设计模型由三类模型图表示,三类模型图是:用例模型图、静态模型图和动态模型图。
7、UML的软件统一开发过程,即生命周期按时间顺序可以划分为,开始,详细设计,系统构造和移交四个阶段及阶段中一系列的循环重复。
8、UML开发过程是一种二维结构软件开发过程,软件项目开发过程流程包括的核心工作内容是,分析,设计,实现,测试和配置9、UML中的五个不同的视图可以完整地描述出所建造的系统,这五种视图是用例视图、逻辑视图、构件视图、进程视图和配置视图。
10、UML中有10中基本图可以完整地描述出所有建造的系统,这10中视图是用例图、类图、对象图、包图、构件图、配置图、序列图、活动图、状态图和合作图。
第三章需求分析与用例建模习题:1、B2、A3、C4、D5、B6、A7、A8、UML软件开发过程需求分析阶段产生的模型由三类模型图表示。
他们是:用例模型图、静态模型图和动态模型图。
9、CRC卡中的描述由类名、类特征、类类型、责任和协作者共五部分组成10、软件项目的目的的可行性研究分析中,技术可行性研究包括风险分析、资源分析、技术分析三部分组成11、在UML软件开发过程的需求分析阶段,建立用例模型的步骤分为,确定系统的范围和边界,确定系统的执行者和用例,对用例进行描述,定义用例之间的关系和审核用例模型。
中南大学刘伟《设计模式》实验参考答案

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 异常,
绘制类图并编程模拟实现。
第4章 模式设计理论习题

第4章模式设计理论4.1 基本知识点4.1.1 本章重要概念(1)关系模式的冗余和异常问题。
(2)FD的定义、逻辑蕴涵、闭包、推理规则、与关键码的联系;平凡的FD;属性集的闭包;推理规则的正确性和完备性;FD集的等价;最小依赖集。
(3)无损分解的定义、性质、测试;保持依赖集的分解。
(4)关系模式的范式:1NF,2NF,3NF,BCNF。
分解成2NF、3NF模式集的算法。
(5)MVD、4NF、JD和5NF的定义。
4.1.2 本章的重点篇幅(1)教材中P148的例4.13。
(无损联接和保持FD的例子)(2)教材中P149的例4.14和P150的例4.15。
(分解成2NF和3NF的例子)4.2 教材中习题4的解答4.1 名词解释数据冗余:指同一个数据在系统中多次重复出现。
函数依赖(FD):在关系模式R(U)中,FD是形为X→Y的一个命题,只要r是R的当前关系,对r中任意两个元组t和s,都有t[X]=s[X]蕴涵t[Y]=s[Y],那么称FD X→Y在关系模式R(U)中成立。
平凡的FD:如果X→Y,且Y?X,则称X→Y是一个“平凡的FD”。
FD集F的闭包F+:被F逻辑蕴涵的函数依赖全体构成的集合,称为F的闭包,记为F+,即F+={ X →Y | F?X→Y}。
属性集X的闭包X+:从已知的FD集F使用FD推理规则推出的所有满足X→A的属性A的集合,称为X的闭包,记为X+,即X+={属性A | X→A在F+中}。
FD的逻辑蕴涵:如果从已知的FD集F能推导出X→Y成立,那么称F逻辑蕴涵X→Y,记为F ?X→Y。
FD集的等价:对于两个FD集F和G,有F+=G+,则称F和G是等价的依赖集。
最小依赖集:设F是属性集U上的FD集,Fmin是F的最小依赖集,那么Fmin应满足下列四个条件:Fmin+=F+;每个FD的右边都是单属性;Fmin中没有冗余的FD;每个FD的左边没有冗余的属性。
无损分解:设关系模式R,F是R上的FD集,ρ={R1,…,Rk }是R的一个分解。
设计模式习题及参考答案

《设计模式》复习题一、单选题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设计模式练习题,并提供相应的答案,希望能对读者在设计模式的学习和实践中有所帮助。
一、题目一:单例模式——懒汉式实现问题描述:请编写一个线程安全的懒汉式单例模式。
解答示例:```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("文件正在保存。
(完整word版)设计模式的题库(word文档良心出品)

1.设计模式的原理? (C)A. 面对实现编程B. 面向对象编程C. 面向接口编程D. 面向组合编程2. 以下对"开-闭"原则的一些描述错误的是?(A)A. "开-闭"原则与"对可变性的封装原则"没有相似性.B. 找到一个系统的可变元素,将它封装起来,叫"开-闭"原则C. 对修改关闭: 是其原则之一D. 从抽象层导出一个或多个新的具体类可以改变系统的行为,是其原则之一3.以下不属于创建型模式是? (A)A.PROXY(代理)B.BUILDER(生成器)C. PROTOTYPE(原型)D.SINGLETON(单件)4.以下不属于结构型模式是? (D)A. COMPOSITE(组合)B. ADAPTER(适配器)C. FLYWEIGHT(享元)D. SINGLETON(单例)5.以下不属于行为型模式是? (D )A. COMMAND(命令)B. STRATEGY(策略)C. MEMENTO(备忘录)D. BRIDGE(桥接)/*23模式意图*/6.以下意图那个是用来描述ABSTRACT FACTORY(抽象工厂)?(A)A.提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
B.定义一个用于创建对象的接口,让子类决定实例化哪一个类。
C.将一个类的接口转换成客户希望的另外一个接口。
D.表示一个作用于某对象结构中的各元素的操作。
7.以下意图那个是用来描述BUILDER(生成器)?(B)A.定义一个用于创建对象的接口,让子类决定实例化哪一个类B.将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
C.保证一个类仅有一个实例,并提供一个访问它的全局访问点。
D.运用共享技术有效地支持大量细粒度的对象。
8.以下意图那个是用来描述FACTORY METHOD(工厂方法)?(C)A.提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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(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("文件正在保存。